1. 程式人生 > >ELK收集Apache的json格式訪問日誌並按狀態碼繪制圖表

ELK收集Apache的json格式訪問日誌並按狀態碼繪制圖表

應用 日誌采集 combined ali vpd href 刪除 kibana elastic

前言

需求說明:

部署一個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界面的這個餅圖在動態的變化
技術分享圖片

任務完成。

ELK收集Apache的json格式訪問日誌並按狀態碼繪制圖表