前言
需求說明:
部署一個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界面的這個餅圖在動態的變化
任務完成。