最近为了方便监控线上服务的运行情况,在centos6.7上折腾部署了一套管理查看日志的服务,
本次考虑到的统计监控的日志来源有如下几种:
a java业务系统运行过程中产生告警日志(logback产生)
b 经过nginx转发的访问日志access.log
c 通过metricbeat主动采集的服务器系统运行日志
数据收集引擎:logstash(因为有些日志需要过滤,分析等二次加工一下方便使用)
归档服务:elasticsearch(能对大容量的数据进行接近实时的存储,搜索,分析)
可视化平台:kibana (通过WEB图表方式直观展示)
我目前用到的日志采集流水线有3种:
1 logback->logstash->elasticsearch->kibana
2 nginx->filebeat->logstash->elasticsearch->kibana
3 metricbeat->elasticsearch->kibana
默认nginx已经正常部署运行:
修改nginx.conf中的log_format 格式如下:
log_format main '$remote_addr - [$time_local] $http_host $request_method "$uri" "$query_string" '
'$status $request_length $body_bytes_sent $upstream_status $upstream_addr $request_time $upstream_response_time '
'"$http_user_agent" "$http_cookie" "$http_x_forwarded_for" "$http_referer"' ;
nginx -t 检测语法是否正确
nginx -s reload 配置刷新使之生效
后面步骤需要用filebeat去同步更新access.log文件
前提是工程需要用logback来管理日志输出,我这里是用maven来管理工程中的jar包依赖,需要额外增加这个包
logback.xml配置如下:
增加几行配置即可,侵入性非常小,日志内容也是异步传输,对正常业务逻辑影响较小。上面的customerFields可有可无,level可按实际情况设置成WARN或者ERROR
访问官网,目前我只用到前2个采集器
找到最新的下载地址,放到自己的用户目录下
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.3-linux-x86_64.tar.gz
解压后对配置文件稍加修改就可直接使用了
修改filebeat.yml配置
1指定监控的文件路径
2 注释掉output.elasticsearch
3 填写连接output.logstash的地址(我用了普通的连接,正式环境最好考虑在连接的时候加上证书校验)
4 nohup ./filebeat -e -c filebeat.yml > nohup.log 2>&1 &
5 tail -f nohup.log 查看启动情况
https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.2.3-linux-x86_64.tar.gz
修改metricbeat.xml
1 根据不同的服务器,填写不同的name和tags的值
2 采用默认的配置直接接入elasticsearch,不需要经过logstash数据分析
3 同理最好采用ssl证书方式连接
4 nohup ./metricbeat -e -c metricbeat.yml > nohup.log 2>&1 &
需要注意JDK版本 Java 8 is required for Logstash 6.x and 5.x
官方下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.tar.gz
解压到自己的目录
修改logstash.conf如下:
输入流
说明:5044端口监听的是通过filebeat传输过来的nginx日志,5033端口监听的是logback日志框架传输过来的日志
部分字符串内容二次加工
说明:
1 这个地方还有点搞不懂,本来我已经设置type=nginx,但是有些服务器nginx传输过来的type内容还是log了,目前我只能加2个类型判断
2 这个grok的message内容需要和nginx.conf配置的log_format一一对应起来,这里有一个在线语法编辑工具,可以一边写格式一边对照,说实话在找到这个工具之前我写这个格式是一点头绪都没有http://grokdebug.herokuapp.com/
3 为了把客户端的IP转成城市地址和经纬度信息,方便在监控地图中直观展示用户群分布等,当然这个经纬度字典库也需要不定时去下载数据 字典下载地址,http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
4 把一些字段转换成数字类型,方便在监控图标中统计
5 对url做了个简单的decode,方便人眼观看
输出流
说明:
打印到控制台
转发到本机的9200端口的elasticsearch中,index名称务必要以logstash,一开始我手贱改了默认名字前缀,而程序里只有默认的logstash前缀的文件才会对location的类型转换处理。导致最后一步地图分布图标无法展示
bin/logstash -f logstash.conf &
如果上面这些步骤都是以root权限操作的话,那么到这一步要碰到麻烦了,因为这个elasticsearch服务的新版本强制不能在root下面运行
如何在指定用户下运行还得大费周折:可以参考如下配置
# groupadd elsearch
# useradd elsearch -g elsearch -p elasticsearch
# vi /etc/security/limits.conf
soft nofile 65536
hard nofile 131072
soft nproc 2048
hard nproc 4096
# vi /etc/security/limits.d/90-nproc.conf
soft nproc 2048
# vi /etc/sysctl.conf
vm.max_map_count=655360
并执行命令:
# sysctl -p
经过这样设置基本是可以用了,每个人可能还不太一样
官方下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
解压后可以酌情修改config下面的jvm.options,修改config下面的network.host: 0.0.0.0,不然其他机器无法访问,我只配置一台机器一个实例,比较简单,其实还可以以集群方式运行。
./bin/elasticsearch
还有一个相对简单的安装方法
yum -y install elasticsearch
这已经是最后一步了,需要统计分析的数据呢都已经准备好了,就看怎么呈现,就为了这个呈现的配置也得化不少时间啊
官网下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz
解压到用户自己的目录
编辑config/kibana.yml 这里我只改了elasticsearch服务的地址,当然最好再加上访问的密码
Run bin/kibana
如果一起顺利的话就可以在浏览器上打开kibana的控制台了
http://localhost:5601/app/kibana
接下来就是本步骤的重头戏了,首先我是找了官网的几个小视频例子看了看
第一步 先创建index pattern来发现日志文件
日志文件名称是步骤6上的output设置的,我这里创建有3种来源3种类型的4个index pattern
表示把所有logstash-log开头的文件都合并进来放到一起
最后要做的就是尝试话各种千奇百怪的图标了
图标1:步骤5中点request_time或upstream_response_time边上的三角形可以排序查看接口耗时