本文以api.mingongge.com.cn域名为测试对象进行统计,通过crm.mingongge请求日志。com.cn和risk.mingongge.com.cn和(这两个域名不具有改变生产环境的统计意义)。生产环境请根据需要统计的具体域名进行统计。由于涉及产线服务器,本文部分服务器IP已打码。一、服务介绍1.1.ELKELK是三个开源软件的缩写,分别表示:Elasticsearch、Logstash、Kibana,都是开源软件。新增了FileBeat,这是一个轻量级的日志收集和处理工具(Agent)。Filebeat占用资源少,适合收集各台服务器上的日志,传输到Logstash。这个工具也是官方推荐的。Elasticsearch是一个开源的分布式搜索引擎,提供收集、分析和存储数据三大功能。其特点是:分布式、零配置、自动发现、索引自动分片、索引复制机制、restful风格接口、多数据源、自动搜索负载等。Logstash主要是一个收集、分析、过滤日志的工具,支持大量的数据获取方法。一般的工作方式是c/s架构,客户端安装在需要收集日志的主机上,服务端负责对接收到的各个节点的日志进行过滤修改,发送给elasticsearch。Kibana也是一个开源和免费的工具。Kibana可以为Logstash和ElasticSearch提供一个日志分析友好的Web界面,可以帮助汇总、分析和搜索重要的数据日志。1.2、NginxNginx(“enginex”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx由IgorSysoev开发,用于俄罗斯访问量第二大的Rambler.ru网站。第一个公共版本0.1.0于2004年10月4日发布。它在类BSD许可下发布其源代码,并以其稳定性、丰富的功能集、示例配置文件和低系统资源消耗而著称。Nginx是一个基于类BSD协议发布的轻量级Web服务器/反向代理服务器和电子邮件(IMAP/POP3)代理服务器。它由俄罗斯程序员IgorSysoev开发,被俄罗斯大型门户网站和搜索引擎Rambler(俄语:Рамблер)使用。其特点是占用内存少,并发能力强。事实上,nginx的并发能力在同类web服务器中确实表现的更好。中国大陆使用nginx网站的用户有:新浪、网易、腾讯等。本文前端使用nginx的反向代理功能,使用nginx的HTTP功能。1.3.KafkaKafka是由Apache软件基金会开发的开源流处理平台,使用Scala和Java编写。Kafka是一个高吞吐量的分布式发布-订阅消息系统,可以处理消费者规模网站中的所有动作流数据。此类操作(页面浏览、搜索和其他用户操作)是现代网络上许多社交功能的关键因素。由于吞吐量要求,这些数据通常通过处理日志和日志聚合来处理。对于像Hadoop这样记录数据和离线分析但需要实时处理约束的系统来说,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制,统一在线和离线消息处理,通过集群提供实时消息。2.架构要求2.1。架构说明使用filebeat收集nginx日志输出到kafka;logstash从kafka消费日志,通过grok格式化数据,输出到elasticsearch。Kibana从elasticsearch中获取日志并过滤掉。图2.2,系统版本CentOSLinuxrelease7.2.1511(Core)3.10.0-514.26.2.el7.x86_642.3,软件版本jdk1.8.0_144nginx-1.12.2filebeat-6.3.2awurstmeister/kafka(dockerimage)logstash-6.5.4elasticsearch-6.4.0kibana-6.4.0三。Linux系统环境配置及优化#查看服务器硬件信息dmidecode|grep"ProductName"#查看CPU型号grepname/proc/cpuinfo#查看CPU编号grep"physicalid"/proc/cpuinfo#查看内存大小grepMemTotal/proc/meminfo四、系统初始化4.1、关闭防火墙systemctlstopfilewalld4.2、关闭selinuxsetenforce0sed-i's#SELINUX=enforcing#SELINUX=disabled#g'/etc/selinux/config4.3。添加普通账户useraddelsearchecho"******"|passwd--stdinelsesearch4.4.配置yum源cat/etc/yum.repos.d/CentOS-Base.repo[base]name=CentOS-$releaseverenabled=1failovermethod=prioritybaseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7[updates]name=CentOS-$releaseverenabled=1failovermethod=prioritybaseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/gpgcheck=1gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7[extras]name=CentOS-$releaseverenabled=1failovermethod=prioritybaseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/gpgcheck=1gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-74.5,在`chkconfig--list|grep3:on|awk'{print$1}'`中为i清理自启动服务;dochkconfig$ioff;doneforiincrondnetworkrsyslogsshd;dochkconfig--level3$ion;donechkconfig--list|grep3:on4.6,服务器时间同步echo'*/5****/usr/sbin/ntpdatetime.windows.com>/dev/null2>&1'>>/var/spool/cron/root4.7,增加文件描述符echo'*-nofile65535'>>/etc/security/limits.conftail-1/etc/security/limits.conf#重新登录后生效(无需重启)ulimit-n(重新登录后查看)4.8、内核参数调优(可选)\cp/etc/sysctl.conf/etc/sysctl.conf.bakcat>>/etc/sysctl.conf</var/log/nginx/api.mingongge.com.cn.logtailf/var/log/nginx/api.mingongger.com.cn.log1xx.2xx.72.175--[18/Mar/2019:13:51:17+0800]"GET/user/fund/113HTTP/1.1"200673"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)sun/1.5.6Chrome/69.0.3497.106Electron/4.0.3Safari/537.36""-"5.2、配置kafka测试环境使用kafkafromdocker,kafka部署略读,选择以下其中一项5.2.1,方法一创建kafkatopic./kafka-topics.sh--create--topicnginxlog--replication-factor1--partitions1--zookeeperlocalhost:21815.2.2,方法二auto.create.topics.enable=true开启kafka自动创建主题配置5.2.3、filebeat部署完成后,确认kafka主题中有数据/kafka-console-consumer.sh--bootstrap-server192.168.0.53:9091--from-beginning--topicnginxlog输出如下{"@timestamp":"2019-03-14T07:16:50.140Z","@metadata":{"beat":"filebeat","type":"doc","version":“6.3.2”,“主题”:“nginxlog"},"fields":{"log_topics":"nginxlog"},"beat":{"version":"6.3.2","name":"test-kafka-web","hostname":"test-kafka-web"},"host":{"name":"test-kafka-web"},"source":"/var/log/nginx/newtest-msp-api.mingongge.com.cn-80.log","offset":114942,"message":"116.226.72.175--[14/Mar/2019:15:16:49+0800]newtest-msp-api.mingongge.com.cnPOST\"/upstream/page\"\"-\"2006314\"http://newtest-msp-crm.mingongge.com.cn/\"200192.168.0.49:60070.0240.024\"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.67Safari/537.36\"\"-\""}一共处理了7516条消息测试环境kafka地址为192.168.0.53:90915.3、配置filebeat采集nginx日志5.3.1,安装filebeatcd/opt/&&wgethttp://download.mingongge.com.cn/download/software/filebeat-6.3.2-x86_64.rpmyumlocalinstallfilebeat-6.3.2-x86_64.rpm-y5.3.2.编辑配置文件cat/etc/filebeat/filebeat.ymlfilebeat.prospectors:-input_type:logenabled:truepaths:-/var/log/nginx/api.mingongge.com.cn.log#收集日志路径fields:log_topics:nginxlog#kafka主题名称json.keys_under_root:truejson.overwrite_keys:trueoutput.kafka:enabled:truehosts:["192.168.0.53:9091"]#kafka地址主题:'%{[fields][log_topics]}'#kafkapartition.round_robin:reachable_only:falsecompression:gzipmax_message_bytes:1000000required_acks:15.3.3,startfilebeat&startsystemctlstartfilebeatsystemctlenablefilebeat5.4,配置logstash5.4.1编辑配置cat/usr/local/logstash/config/nginx.confinput{kafka{type=>"nginxlog"topics=>["nginxlog"]bootstrap_servers=>["192.168.0.53:9091"]group_id=>"nginxlog"auto_offset_reset=>latestcodec=>"json"}}filter{if[type]=="nginxlog"{grok{match=>{"message"=>"%{COMBINEDAPACHELOG}"}remove_field=>"message"}date{match=>["timestamp","dd/MMM/YYYY:HH:mm:ssZ"]}geoip{source=>"clientip"target=>"geoip"database=>"/usr/local/logstash/config/GeoLite2-City.mmdb"add_field=>["[geoip][坐标]","%{[geoip][longitude]}"]#添加字段坐标,值为经度add_field=>["[geoip][coordinates]","%{[geoip][latitude]}"]#添加字段坐标,值为纬度}mutate{convert=>[[[geoip][coordinates]","float"]}useragent{source=>"agent"target=>"userAgent"}}}output{if[type]=='nginxlog'{elasticsearch{hosts=>["http://192.168.0.48:9200"]index=>"logstash-nginxlog-%{+YYYY.MM.dd}"}stdout{codec=>rubydebug}}}5.4.2、使用配置文件启动Logstash服务,观察输出/usr/local/logstash/bin/logstash-fnginx.conf{"httpversion"=>"1.1","verb"=>"GET","auth"=>"-","@timestamp"=>2019-03-18T06:41:27.000Z,"type"=>"nginxlog","json"=>{},"source"=>"/var/log/nginx/newtest-msp-api.mingongge.com.cn-80.log","fields"=>{"log_topics"=>"nginxlog"},"response"=>"200","offset"=>957434,"host"=>{"name"=>"test-kafka-web"},"beat"=>{"hostname"=>"test-kafka-web","version"=>"6.3.2","name"=>"test-kafka-web"},"bytes"=>"673","re??quest"=>"/user/fund/113","timestamp"=>"18/Mar/2019:14:41:27+0800","re??ferrer"=>"\"-\"","userAgent"=>{"os"=>"Windows","major"=>"4","patch"=>"3","build"=>"","minor"=>"0","os_name"=>"Windows","device"=>"Other","name"=>"Electron"},"geoip"=>{"ip"=>"1xx.2xx.72.175","country_name"=>"China","coordinates"=>[[0]121.4012,[1]31.0449],"region_name"=>"Shanghai","location"=>{"lat"=>31.0449,"lon"=>121.4012},"continent_code"=>"AS","timezone"=>"Asia/Shanghai","longitude"=>121.4012,"city_name"=>"Shanghai","country_code2"=>"CN","re??gion_code"=>"SH","latitude"=>31.0449,"country_code3"=>"CN"},"@version"=>"1","clientip"=>"1xx.2xx.72.175","ident"=>"-","agent"=>"\"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)sun/1.5.6Chrome/69.0.3497.106Electron/4.0.3Safari/537.36\""}5.4.3,启动logstash后台确认出现以上输出后,将logstash从当前shell中分离出来,放在后面运行nohup/usr/local/logstash/bin/logstash-fnginx.conf&>/dev/null&5.5,kibana配置5.5.1,修改kibana配置/usr/local/kibana-6.5.4-linux-x86_64/config/kibana.yml#添加高德地图tilemap.url:'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'5.5.2、创建IndexPattern5.5.3、IP访问TOP5选择柱状图添加X轴,以geoip.ip为orderbyfield5.5.4、PV默认选择metric统计日志总数,也就是PV号5.5.5,全局访问地图选择mapField选择geoip.location选择添加高德地图5.5.6,实时路况选择折线图5.5.7,操作系统选择饼图5.5.8,登录次数过滤登录keyword,andDocount统计5.5.9,访问区域5.5.10,Dashboard显示IP访问Top5:每日客户端IP请求次数最多的前五名(可分析攻击者IP)PV:每日页面浏览量全局访问图:直观显示用户来自哪个国家和地区实时流量:根据@timestamp字段显示单位时间内的请求数(可根据异常峰值判断是否遇到攻击)操作系统:显示客户端使用的设备比例登录次数:过滤请求在登录访问记录中,已经粗略估计了登录次数。访问地区:显示访问量最多的国家或地区,其他指标需要显示,可自由发挥