您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

利用ELK分析Nginx日志生产实战(高清多图)

时间:2020-06-12 17:33:13  来源:  作者:

本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意义),生产环境请根据具体需要统计的域名进行统计。

由于涉及生产线上服务器,故本文部分服务器IP做了打码处理。

一、服务介绍

1.1、ELK

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

1.2、Nginx

Nginx("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。

本文中前端使用了nginx的反向代理功能,并使用了nginx的HTTP功能。

1.3、Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和JAVA编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

二、架构要求

2.1、架构描述

使用filebeat收集nginx日志,输出到kafka;logstash从kafka中消费日志,通过grok进行数据格式化,输出到elasticsearch中,kibana从elasticsearch中获取日志,进行过滤出图.

利用ELK分析Nginx日志生产实战(高清多图)

 

2.2、系统版本

centos linux release 7.2.1511 (Core)3.10.0-514.26.2.el7.x86_64

2.3、软件版本

jdk1.8.0_144nginx-1.12.2filebeat-6.3.2awurstmeister/kafka(Docker image)logstash-6.5.4elasticsearch-6.4.0kibana-6.4.0

三、linux系统环境配置与优化

#查看服务器硬件信息dmidecode|grep "Product Name"#查看CPU型号grep name /proc/cpuinfo#查看CPU个数grep "physical id" /proc/cpuinfo#查看内存大小grep MemTotal /proc/meminfo

四、系统初始化

4.1、关闭防火墙

systemctl stop filewalld

4.2、关闭selinux

setenforce 0sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

4.3、添加普通账户

useradd elsearchecho "******"|passwd --stdin elsearch

4.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-7

4.5、清理开机自启动服务

for i in `chkconfig --list|grep 3:on |awk '{print $1}'`;do chkconfig$i off;donefor i in crond network rsyslog sshd;do chkconfig --level 3 $ion;donechkconfig --list|grep 3:on

4.6、服务器时间同步

echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com > /dev/null2>&1' >>/var/spool/cron/root

4.7、加大文件描述符

echo '* - nofile 65535' >> /etc/security/limits.conftail -1 /etc/security/limits.conf#重新登陆后生效(无需重启)ulimit -n(重新登陆后查看)

4.8、内核参数调优(可不操作)

cp /etc/sysctl.conf /etc/sysctl.conf.bakcat>>/etc/sysctl.conf<<EOFnet.ipv4.tcp_timestamps = 0net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_mem = 94500000 915000000 927000000net.ipv4.tcp_max_orphans = 3276800net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem=4096 87380 16777216net.ipv4.tcp_wmem=4096 65536 16777216net.core.netdev_max_backlog = 32768net.core.somaxconn = 32768net.ipv4.tcp_syncookies=1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout=1net.ipv4.tcp_keepalive_time=1200net.ipv4.tcp_max_syn_backlog = 65536net.ipv4.ip_local_port_range = 1024 65535EOF/sbin/sysctl -p

五、部署开始

5.1、更改nginx日志输出格式

5.1.1、定义日志格式

cat /etc/nginx/nginx.conflog_format main '$remote_addr - $remote_user [$time_local]"$request" ''$status$body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

5.1.2、加载日志格式到对应域名配置中

cat /etc/nginx/conf.d/vhost/api.mingongge.com.cn.confserver {listen 80;server_name  newtest-msp-api.mingongge.com.cn;access_log   /var/log/nginx/api.mingongge.com.cn.log main;}

5.1.3、reload生效

nginx -s reload

5.1.4、清空原输出文件,并查看输出的日志格式

:> /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/113 HTTP/1.1" 200 673 "-" "Mozilla/5.0 (WindowsNT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) sun/1.5.6 Chrome/69.0.3497.106Electron/4.0.3 Safari/537.36" "-"

5.2、配置kafka

测试环境使用docker起的kafka,kafka部署掠过,以下任选一种

5.2.1、方法一 创建kafka topic

./kafka-topics.sh --create --topic nginxlog --replication-factor 1--partitions 1 --zookeeper localhost:2181

5.2.2、方法二

auto.create.topics.enable=true

开启kafka自动创建topic配置

5.2.3、filebeat部署完成后确认kafka topic中有数据

./kafka-console-consumer.sh --bootstrap-server 192.168.0.53:9091--from-beginning --topic nginxlog

输出如下

{"@timestamp":"2019-03-14T07:16:50.140Z","@metadata":{"beat":"filebeat","type":"doc","version":"6.3.2","topic":"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.cn POST"/upstream/page" "-" 200 6314"http://newtest-msp-crm.mingongge.com.cn/" 200 192.168.0.49:60070.024 0.024 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36""-""}Processed a total of 7516 messages

测试环境中kafka地址为

192.168.0.53:9091

5.3、配置filebeat收集nginx日志

5.3.1、安装filebeat

cd /opt/ && wget http://download.mingongge.com.cn/download/software/filebeat-6.3.2-x86_64.rpmyum localinstall filebeat-6.3.2-x86_64.rpm -y

5.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中topic名称json.keys_under_root: truejson.overwrite_keys: trueoutput.kafka:enabled: truehosts:["192.168.0.53:9091"] #kafka地址topic:'%{[fields][log_topics]}' #kafka中topic名称partition.round_robin:reachable_only: falsecompression: gzipmax_message_bytes: 1000000required_acks: 1

5.3.3、启动filebeat& 开机启动

systemctl start filebeatsystemctl enable filebeat

5.4、配置logstash

5.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:ss Z" ]}geoip {source =>"clientip"target =>"geoip"database =>"/usr/local/logstash/config/GeoLite2-City.mmdb"add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}" ] #添加字段coordinates,值为经度add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}" ] #添加字段coordinates,值为纬度}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 -f nginx.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","request"=> "/user/fund/113","timestamp"=> "18/Mar/2019:14:41:27 +0800","referrer"=> ""-"","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","region_code" => "SH","latitude" => 31.0449,"country_code3" => "CN"},"@version"=> "1","clientip"=> "1xx.2xx.72.175","ident"=> "-","agent"=> ""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) sun/1.5.6 Chrome/69.0.3497.106 Electron/4.0.3Safari/537.36""}

5.4.3、后台启动logstash

确认出现以上输出后,将logstash分离出当前shell,并放在后台运行

nohup /usr/local/logstash/bin/logstash -f nginx.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、创建Index Pattern

利用ELK分析Nginx日志生产实战(高清多图)

 


利用ELK分析Nginx日志生产实战(高清多图)

 

5.5.3、IP访问TOP5

选择柱形图

利用ELK分析Nginx日志生产实战(高清多图)

 

添加X轴,以geoip.ip为order by字段

利用ELK分析Nginx日志生产实战(高清多图)

 

5.5.4 、PV

选择metric

利用ELK分析Nginx日志生产实战(高清多图)

 

默认统计总日志条数,即为PV数

利用ELK分析Nginx日志生产实战(高清多图)

 

5.5.5、全球访问地图

选择map

利用ELK分析Nginx日志生产实战(高清多图)

 

Field选择geoip.location

利用ELK分析Nginx日志生产实战(高清多图)

 

选择添加高德地图

5.5.6、实时流量

选择线条图

利用ELK分析Nginx日志生产实战(高清多图)

 


利用ELK分析Nginx日志生产实战(高清多图)

 

5.5.8、登陆次数

过滤login关键字,并做count统计

利用ELK分析Nginx日志生产实战(高清多图)

 

5.5.9、访问地区

利用ELK分析Nginx日志生产实战(高清多图)

 

5.5.10、Dashboard展示

  • IP访问Top5:每日客户端IP请求数最多的前五个(可分析出攻击者IP)
  • PV:每日页面访问量
  • 全球访问图:直观的展示用户来自哪个国家哪个地区
  • 实时流量:根据@timestamp字段来展示单位时间的请求数(可根据异常峰值判断是否遭遇攻击)
  • 操作系统:展示客户端所用设备所占比重
  • 登陆次数:通过过滤request中login的访问记录,粗略估算出进行过登陆的次数
  • 访问地区:展示访问量最多的国家或地区
  • 需展示其他指标,可进行自由发挥
利用ELK分析Nginx日志生产实战(高清多图)

 



Tags:ELK   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。图片来自 包图网先看看结果有多轻量吧: Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索...【详细内容】
2021-09-14  Tags: ELK  点击:(97)  评论:(0)  加入收藏
在我们的服务器上通常会生成各种日志文件,比如系统日志、 应用日志、安全日志。当系统发生故障时,工程师需要登录到服务器上,在日志里查找故障原因。如果定位到处理请求的服务...【详细内容】
2021-06-01  Tags: ELK  点击:(159)  评论:(0)  加入收藏
开始之前先了解一下什么是ELK ELK:大型分布式日志分析系统ELK elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)Elasticsearch:Elasticsearch (ES)是一个基于Luce...【详细内容】
2021-04-30  Tags: ELK  点击:(186)  评论:(0)  加入收藏
本文介绍使用docker安装部署Filebeat与Elasticsearch、Logstash、Kibana(简称ELK)全家桶7.5.1。如果熟悉框架的话,直接copy配置文件与docker命令,简单删减和修改路径,即可快速启...【详细内容】
2021-03-22  Tags: ELK  点击:(428)  评论:(0)  加入收藏
Loki 作为一个新兴的日志解决方案,现在越来越受到关注。经过调研比较,我们正在将日志服务底层逐步从 ES 替换为 Loki 。图片来自 Pexels本文基于我们对 Loki 的使用和理解,从它...【详细内容】
2020-12-23  Tags: ELK  点击:(143)  评论:(0)  加入收藏
一般提到监控,很多人就会想到监控服务器运行状态,网络运行状态。其实由于业务需要,服务器和网络设备每时每刻产生的海量日志也同样的重要。 为什么选用ELK? 首先我们来了解一下E...【详细内容】
2020-11-18  Tags: ELK  点击:(134)  评论:(0)  加入收藏
本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统。日志平台具体发展历程可以参考上篇 「从 ELK 到 EFK 演进」废话不多...【详细内容】
2020-07-27  Tags: ELK  点击:(55)  评论:(0)  加入收藏
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Lok...【详细内容】
2020-06-15  Tags: ELK  点击:(88)  评论:(0)  加入收藏
前言起源许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,...【详细内容】
2020-06-13  Tags: ELK  点击:(44)  评论:(0)  加入收藏
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意义),生产环境请根据具体需...【详细内容】
2020-06-12  Tags: ELK  点击:(57)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条