设为首页 收藏本站
查看: 2930|回复: 0

[经验分享] ELK收集Apache的json格式访问日志并按状态码绘制图表

[复制链接]

尚未签到

发表于 2019-1-28 12:01:59 | 显示全部楼层 |阅读模式
前言

需求说明:
  部署一个Apache,收集Apache的json格式访问日志,并且将访问日志的状态码在kibana上绘制饼状图,添加到kibana的dashboard。

环境说明:
  10.0.0.101(test101)——部署apache、filebeat
10.0.0.102(test102)——部署elasticsearch、kibana
备注:本次实验的重点在于怎样收集Apache的json格式日志,因此没有装logstash。日志数据从filebeat——elasticsearch——kibana展示:


操作过程

1、Apache、filebeat的安装部署与日志采集

1.1 在test101部署Apache

[root@test101 ~]# yum -y install httpd
  部署好之后,然后写了一个静态的index.html放在/var/www下面提供访问,以产生日志:

  查看apache最初的access.log日志格式,是这样的:

[root@test101 httpd]# tailf access_log
10.0.0.1 - - [14/Dec/2018:09:35:37 +0800] "GET / HTTP/1.1" 200 13 "-" "Mozilla/5.0 (Windows NT 6.1; Win64;
10.0.0.1 - - [14/Dec/2018:09:35:56 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:43:51 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:36 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:36 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:36 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:37 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:57:13 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:57:13 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:57:13 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
1.2 部署filebeat
  filebeat的部署和配置可以参考《用ELK工具收集rancher的容器日志》。这里主要修改input和elasticsearch这两个地方的配置就可以了

#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
# Change to true to enable this input configuration.
enabled: true   
paths:      
- /var/log/httpd/access_log      #apache日志路径
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
hosts: ["10.0.0.102:9200"]
  然后,启动filebeat服务

1.3 在test102部署elasticsearch和kibana
  部署和配置可参考《从0开始搭建ELK及采集日志的简单应用》,不赘述。

1.4 kibana查看日志
  采集到kibana的界面展示是这样子的(第一次查看数据会要求在management里面创建索引,这里创建一个filebeat-*的索引就可以查看日志了)

  这样展示的日志,只是简单的将日志收集起来。但是对照上图左边的关键字和右边灰色阴影的字段(左边的字段和右边的灰色阴影字段是一一对应的),可以看到我们需要的messages在一条信息里面,不便于日志的分析和图表的制作。因此需要将上图的message信息格式化成json格式输出,将里面的关键字段改成key:value的形式,并采集出来。

2、将Apache日志格式定义为json格式
  修改Apache日志打印格式。修改在/etc/httpd/conf/httpd.conf,修改两个地方:
1)大概在202行的位置,找个空格加入下面的代码(注意空格什么的),这一串代码就是把上面信息的messages的关键信息改写成key:value的格式展示:

LogFormat "{ \
\"@timestamp\": \"%{%Y-%m-%dT%H:%M:%S%z}t\", \
\"@version\": \"1\", \
\"tags\":[\"apache\"], \
\"message\": \"%h %l %u %t \\\"%r\\\" %>s %b\", \
\"clientip\": \"%a\", \
\"duration\": %D, \
\"status\": %>s, \
\"request\": \"%U%q\", \
\"urlpath\": \"%U\", \
\"urlquery\": \"%q\", \
\"bytes\": %B, \
\"method\": \"%m\", \
\"site\": \"%{Host}i\", \
\"referer\": \"%{Referer}i\", \
\"useragent\": \"%{User-agent}i\" \
}" apache_json
  2)修改CustomLog "logs/access_log" combined为CustomLog "logs/access_log" apache_json  (把原来默认的combined换成apache_json,原文件大概在217行的位置)
  将原来的access.log清空,并重启httpd服务

[root@test101 conf]# systemctl restart httpd
3、访问Apache首页,验证新的json日志格式
  刷新apache首页,日志格式已经变成了这样:

[root@test101 httpd]# tailf access_log
{   "@timestamp": "2018-12-14T10:25:36+0800",   "@version": "1",    "tags":["apache"],  "message": "10.0.0.1 - - [14/Dec/2018:10:25:36 +0800] \"GET / HTTP/1.1\" 304 -",    "clientip": "10.0.0.1",     "duration": 737,    "status": 304,  "request": "/index.html",   "urlpath": "/index.html",   "urlquery": "",     "bytes": 0,     "method": "GET",    "site": "10.0.0.101",   "referer": "-",     "useragent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"    }
{   "@timestamp": "2018-12-14T10:25:45+0800",   "@version": "1",    "tags":["apache"],  "message": "10.0.0.1 - - [14/Dec/2018:10:25:45 +0800] \"GET / HTTP/1.1\" 304 -",    "clientip": "10.0.0.1",     "duration": 5506,   "status": 304,  "request": "/index.html",   "urlpath": "/index.html",   "urlquery": "",     "bytes": 0,     "method": "GET",    "site": "10.0.0.101",   "referer": "-",     "useragent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"    }
4、修改filebeat配置
  修改filebeat.yaml,在日志路径后面加入下面两行,然后重启filebeat:

      paths:
- /var/log/httpd/access_log
#- c:\programdata\elasticsearch\logs\*
json.keys_under_root: true     #这两行是为了让filebeat能够收集json格式的日志
json.overwrite_keys: true
  然后重启filebeat

5、清除kibana和elasticsearch里面的索引数据
  因为在上面采集日志时,在kibana里面有创建一个filebeat-*的索引,最好清掉,让它重新生成

5.1 删除kibana界面创建的filebeat-*索引


5.2 清除elasticsearch原有的filebeat索引

[root@test102 ~]#  curl 10.0.0.102:9200/_cat/indices     #查看当前索引数据
green  open .kibana_1                 udOUvbprSnKWUJISwD0r_g 1 0  4 0  46.7kb  46.7kb
yellow open filebeat-6.5.3-2018.12.14 OvkhFVFYRIWlkH7gLslJ6A 3 1 14 0 150.1kb 150.1kb
[root@test102 ~]#
[root@test102 ~]#
[root@test102 ~]#  curl -XDELETE 10.0.0.102:9200/filebeat-6.5.3-2018.12.14   #删除索引数据
{"acknowledged":true}
[root@test102 ~]#
[root@test102 ~]#
[root@test102 ~]#  curl 10.0.0.102:9200/_cat/indices
green open .kibana_1 udOUvbprSnKWUJISwD0r_g 1 0 4 0 46.7kb 46.7kb
[root@test102 ~]#
6、查看kibana界面收集的日志
  当刷新Apache首页,然后kibana的management页面会生成新的索引。再到kibana界面创建新的filebeat-*索引,然后查看kibana界面的日志,json格式收集成功:


图表绘制
  1、选择Visualize

  2、点击“Create a visualization”

  3、选择要创建的图形。这里选择的是饼图

  4、选择绘制饼图的数据源(这里所有的数据都来自filebeat-*索引,因此选择filebeat-*):

  5、选择饼图的展现的方式

  如果选择Split Chart,绘制出来的图就是这样的

  6、选择绘制饼图的key,就是说根据哪个元素数据来绘制饼图。这里选择的是Apache访问日志的状态码(status)

  7、选好之后,可以先选择上面的三角形符号可以预览饼图是否绘制OK,如果OK ,再点击右上角的“save”保存图形

  8、保存饼图,Title自定义


添加饼图到dashboard
  1、选择Dashboard,创建一个新的dashboard

  2、选择“Add”按钮,右边就会弹出来“Add Panels”,可以看到刚刚我们绘制的饼图。选择这个饼图,保存

  3、dashboard保存成功之后,再不断的刷新Apache首页,生成更多的状态码,然后就会看到dashboard界面的这个饼图在动态的变化

  任务完成。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668684-1-1.html 上篇帖子: ELK部署logstash安装部署及应用(二) 下篇帖子: ELK日志系统部署(CentOS7.3)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表