日誌收集系統elk

elk簡介

ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個服務器上搜集日誌後傳輸給Logstash,官方也推薦此工具。html

Elasticsearch是個開源分佈式搜索引擎,提供蒐集、分析、存儲數據三大功能。它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。java

Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。通常工做方式爲c/s架構,client端安裝在須要收集日誌的tt主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。node

Kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。python

Filebeat隸屬於Beats。目前Beats包含四種工具:mysql

    1. Packetbeat(蒐集網絡流量數據)
    2. Topbeat(蒐集系統、進程和文件系統級別的 CPU 和內存使用狀況等數據)
    3. Filebeat(蒐集文件數據)
    4. Winlogbeat(蒐集 Windows 事件日誌數據)

官方幫助

Filebeat:linux

https://www.elastic.co/cn/products/beats/filebeat
https://www.elastic.co/guide/en/beats/filebeat/5.6/index.htmlnginx

Logstash:
https://www.elastic.co/cn/products/logstash
https://www.elastic.co/guide/en/logstash/5.6/index.htmlgit

Kibana:github

https://www.elastic.co/cn/products/kibana

https://www.elastic.co/guide/en/kibana/5.5/index.html

Elasticsearch:
https://www.elastic.co/cn/products/elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html

elasticsearch中文社區:
https://elasticsearch.cn/

實驗架構總共用到的主機:

10.0.0.71 elk01
10.0.0.72 elk02
10.0.0.73 elk03

rsyslog

rsyslog日誌採集介紹與使用

架構圖:

Linux的日誌記錄用戶在系統中的全部操做,經過看日誌分析系統的狀態,這是i運維的基本功,所以咱們須要熟練掌握rsyslog服務的使用
日誌記錄後會實時傳輸到一個更加安全的遠程服務器中,達到真正記錄用戶行爲,使得日誌的二次更改可能性下降,從而達到日誌真實回訪,問題追蹤的目的

rsyslog功能介紹
rsyslog是比syslog更增強大的工具 他具備如下優點
1.直接將日誌寫入數據庫
2.日誌隊列(內存隊列和磁盤隊列)
3.靈活模板,可獲得多種輸出結果,獲得想要的可視化圖形輸出
4.插件結構,多種輸入輸出模塊
5.能夠把日誌存放在MySQL postgresql oracle 等數據庫中

rsyslog.conf文件中的日誌規則定義

facitity.priority   Target 

facility  日誌設備
    auth         #pam產生的日誌,認證日誌 
    authpriv     #ssh,ftp等登陸信息的驗證信息,認證受權認證 
    cron         #時間任務相關 
    kern         #內核 
    lpr          #打印
    mail         #郵件
    mark(syslog) #rsyslog服務內部的信息,時間標識
    news         #新聞組
    user         #用戶程序產生的相關信息
    uucp         #unix to unix copy, unix主機之間相關的通信 
    local 1~7    #自定義的日誌設備 

priority  日誌級別(低-高)

    debug           調試
    info            通常信息格式
    notice          最具備重要性的普通條件信息
    warning,warn    警告級別
    err,error       錯誤級別  阻止某個功能或者模塊不能正常工做的信息
    crit            嚴重級別  組織整個系統或者整個軟件沒法正常工做的消息
    alert           須要馬上修改的信息
    emerg,panic     內核崩潰 嚴重信息  級別最高

注意:日誌級別記錄方式爲  只記錄自己級別或到更高的級別 低於設定級別將不被記錄。


Target:  輸入的目標   日誌處理方式
如:文件  用戶  日誌服務器  管道   等處理方式

綜合實驗

案例一: 單機ELK部署

拓撲圖:

基本步驟:

經過rsyslog收集本機全部日誌
filebeat 拿到日誌傳給elasticsearch
elasticsearch分析日誌而且將其處理爲json格式
elasticsearch把分析結果傳送給kibana
kibana進行結果分析作可視化結果 如 出圖 等操做

rsyslog安裝配置:

1. 安裝rsyslog (udp/514 tcp/514)

rpm -qa rsyslog 
yum  install -y rsyslog
vi /etc/rsyslog.conf 

配置日誌收集方式, 若是是本機則直接寫文件路徑,若是是本機 則直接寫路徑 若是是要傳送到遠端服務器

============UDP日誌傳輸配置[建議UDP傳輸]=================
UDP協議傳輸日誌配置
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
更改成(去掉協議和端口的註釋):
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
*.*                                                     @10.0.0.72:514       --新增配置
============UDP日誌傳輸配置[建議UDP傳輸]=================


============TCP日誌傳輸配置============================
tcp協議傳輸日誌配置:
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

更改成(去掉協議和端口的註釋):
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

找到local7.*  下面添加傳送的服務器
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
*.*                                                     @@10.0.0.72:514     --新增配置
============TCP日誌傳輸配置============================

兩個協議能夠同時監聽。
1.1 rsyslog收集本機服務器日誌配置
收集本機日誌:
vi /etc/rsyslog.conf   約74行
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

此行如下新增如下內容行 [這是服務器配置,客戶端直接 @@10.0.0.72:514 便可]
*.*                                                     /var/log/chenleilei.log

以上配置是將全部日誌都進行收集,配置完成後保存文件,重啓服務
rsyslog配置小總結:

服務器端配置日誌文件 vim /etc/rsyslog.conf 中的

1.修改日誌傳輸協議
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

2.配置寫入日誌的文件位置
# Save boot messages also to boot.log  行下添加寫入的日誌文件 

3.重啓服務

客戶端配置:
1. 開啓與服務器相同的協議(去除#號)
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

2. 配置遠端服務器地址和端口[tcp協議爲 兩個@ 傳輸日誌   udp協議使用一個@傳輸日誌]
# Save boot messages also to boot.log
*.*                                                     @10.0.0.71:514

啓動rsyslog服務

systemctl start rsyslog

使用logger命令 測試日誌收集是否正常

以上配置完成會產生一個  /var/log/chenleilei.log  的配置文件。 新開一個窗口來監視這個配置文件

tailf /var/log/chenleilei.log 

另外一窗口使用 logger 'rsyslog test from chenleilei'   測試寫入日誌  
而後檢查監視的窗口是否多出新寫入的日誌 若是寫入成功便可表明配置正確

寫入的日誌:
Feb 20 16:03:59 elk01 root: rsyslog test from chenleilei

通過這裏的檢查即表明 rsyslog配置成功
能夠進行設置開啓此服務
systemctl enable rsyslog    [設置開機啓動]
systemctl start rsyslog     [啓動服務]
systemctl status rsyslog    [查看服務狀態]

注意配置到這裏 是 rsyslog收集了全部日誌。而且沒有進行處理,下面會講解

檢查服務端口: netstat -lnpu
[root@elk01 ~]# netstat -lnpu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address   State       PID/Program name 
udp        0      0 0.0.0.0:514      0.0.0.0:*                     5469/rsyslogd    
udp        0      0 127.0.0.1:323    0.0.0.0:*                     564/chronyd      
udp6       0      0 :::514           :::*                          5469/rsyslogd    
udp6       0      0 ::1:323          :::*                          564/chronyd    

514端口爲rsyslog服務默認端口,看到存在即表明服務啓動成功
1.2 rsyslog收集多臺服務器日誌配置

開啓日誌收集 udp/tcp 模式

#--安裝rsyslog軟件
yum install  -y rsyslog

#配置日誌傳送服務器
vi /etc/rsyslog.conf


----------------------去掉#號 開啓TCP模式傳送日誌------------
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
*.*                                                     @@10.0.0.72:514
----------------------去掉#號 開啓TCP模式傳送日誌------------



除此以外還可使用UDP協議進行傳輸,UDP無需認證效率更高,安全性較差
可是寫入日誌內容較少 沒有三次握手信息,切記 開啓協議必須保持一隻不然沒法傳輸

----------------------去掉#號 開啓UDP模式傳送日誌------------
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
*.*                                                     @10.0.0.72:514
----------------------去掉#號 開啓UDP模式傳送日誌------------

配置完成重啓服務便可
systemctl restart rsyslog

以上配置僅僅只是配置了日誌收集方式,並無進行處理

案例二. JAVA環境配置,部署 filebeat+Elasticsearch

JDK安裝

JDK 1.8.0下載:
https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
注意: 必須使用JDK8.0 才能夠繼續安裝使用,建議選擇 JDK-8u201-Linux的x64.rpm


若是有高版本建議刪除:
先查詢 rpm -qa | grep jdk
[root@elk02 java]# rpm -qa | grep jdk
jdk-11.0.2-11.0.2-ga.x86_64
jdk1.8-1.8.0_201-fcs.x86_64

若是不是1.8版本就刪除 而後安裝1.8版本
rpm -e --nodeps jdk-11.0.2-11.0.2-ga.x86_64

 
下載好 jdk-8u201-linux-x64.rpm

安裝:
rpm -ivh jdk-8u201-linux-x64.rpm

如發現沒法安裝請使用: -force --nodeps 參數安裝

添加環境變量 [vi /etc/profile]

尾部添加如下變量:

JAVA_HOME=/usr/java/jdk1.8.0_131
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME

保存退出  

使用 source /etc/profile  讓變量生效


=====================================

另外可使用
yum -y list java  來查看對應java版本 而後直接安裝對應版本

查詢當前版本:
[root@elk02 ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

java截圖

安裝filebeat[服務器安裝]

下載filebeat

https://www.elastic.co/guide/en/beats/filebeat/6.6/setup-repositories.html

1. 首先須要下載公鑰,執行下載公鑰
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

2. 新建repo文件
vi  /etc/yum.repos.d/elk.repo

[elastic-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


3.安裝filebeat
yum install filebeat -y

4. 啓動filebeat
systemctl start filebeat.service 

5. 設置開機啓動
systemctl enable filebeat.service
配置filebeat
filebeat配置文件地址: /etc/filebeat/
[root@elk01 yum.repos.d]# ls /etc/filebeat/
fields.yml  filebeat.reference.yml  filebeat.yml  modules.d    <<---filebeat配置文件

先備份原始文件
cp  /etc/filebeat/filebeat.yml{,.bak}

配置filebeat

vim /etc/filebeat/filebeat.yml

修改約24行 複製 #  enabled: false  粘貼後去除註釋
23   # Change to true to enable this input configuration.
24   #  enabled: false
25   enabled: true

修改約29行,複製後另起一行配置日誌記錄文件
29   #  - /var/log/httpd/access_log
30      -/var/log/chenleilei.log  


修改 153行左右
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

改成:  
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["10.0.0.72:9200"]          ###這裏IP地址爲傳給誰的



#瞭解:
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
#這段配置是給 https 和須要驗證賬號密碼的場景使用的,若是有須要能夠開啓

安裝使用 elasticsearch

安裝elasticsearch
#安裝  elasticsearch
yum -y install elasticsearch

#配置  elasticsearch 
# 配置文件地址: /etc/elasticsearch/elasticsearch.yml

備份一次配置文件:
cp  /etc/elasticsearch/elasticsearch.yml{,.bak}
配置 elasticsearch.yml
vim /etc/elasticsearch/elasticsearch.yml

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 10.0.0.72    ##----->這裏修改成 elasticsearch服務器地址,默認改爲0.0.0.0 監聽全部便可,若是寫成IP地址那麼curl獲取 日誌的時候 curl 127.0.0.1:9200/_cat/indices  會沒法獲取到相關信息 ,只能使用定義的  curl 10.0.0.72:9200/_cat/indices   若是隻有一臺 建議直接使用0.0.0.0 就行
啓動elasticsearch服務:
systemctl enable elasticsearch.service 
systemctl start elasticsearch.service 
systemctl status elasticsearch.service

elasticsearch日誌: /var/log/elasticsearch/elasticsearch.log

能夠經過日誌文件來判斷elastic search是否正常啓動

經過網頁驗證 elasticsearch 服務是否啓動成功

http://10.0.0.72:9200/

成功訪問即表明配置正確

處理日誌將使用到filebeat:

安裝Kibana

安裝
yum直接安裝有點大 從國外源下載太慢,因此須要本身先手動下載而後經過rpm來安裝
rpm -ivh kibana-6.6.0-x86_64.rpm

[root@elk01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm 
Preparing...                          ################################# [100%]
    package kibana-6.6.0-1.x86_64 is already installed
配置
vi /etc/kibana/kibana.yml

跳轉到 第 2 行 開啓服務端口
#server.port: 5601  ##原來
 server.port: 5601  ## 新增一行 去掉註釋
 
跳轉到 第 8 行左右 開啓服務端口
#server.host: "localhost"       ## 不用解除註釋 直接 yyp 從新粘貼一行
 server.host: "0.0.0.0"         ##  這一行 服務監聽電口改成  0.0.0.0  監聽全部
 
跳轉到 第 31 行左右 開啓服務端口
#elasticsearch.hosts: ["http://localhost:9200"]
 elasticsearch.hosts: ["http://10.0.0.71:9200"]
 
 配置完成保存退出 重啓kibana
 systemctl restart kibana.service
刪除kibana收集的數據
服務中使用:
curl 127.0.0.1:9200/_cat/indices      查看現有數據

刪除kibana數據:
[root@elk01 Kibana_Hanization-master]# curl -XDELETE  127.0.0.1:9200/.kibana_1
{"acknowledged":true}      ####[出現true 表明刪除成功,能夠再次查看]
kibana網頁端配置數據收集
建立第一條索引(確保服務都啓動了)
http://10.0.0.71:5601/app/kibana#/management/kibana/index?_g=()

點擊進入: Management - kibana - Index Patterns

#Step 1 of 2: Define index pattern
#Index pattern
filebeat-*         ###---第一步輸入索引名


filebeat-6.6.1-2019.03.13      ##這是匹配出來的,匹配出來了就 點擊   【Next step】


#Step 2 of 2: Configure settings  [設置根據什麼選擇索引]
選擇
@timestamp 

選擇完成建立索引  點擊 Create index pattern

已經能夠收集日誌了 配置完成

kibana 網頁端配置日誌過濾[優化日誌收集]
vim /etc/filebeat/filebeat.yml

找到 大約39行 內容爲:
#include_lines: ['^ERR', '^WARN']
修改成:
include_lines: ['^ERR', '^WARN', 'sshd']

這樣的話 系統只會收集以ERROR WARN 開頭 和包含sshd 的日誌   修改完成保存後重啓filebeat

經過tailf  /var/log/chenleilei.log[日誌文件]  已經看不到了 一些亂七八糟的日誌了 只會出現 咱們設置的3中日誌

添加 sshd  只是爲了測試 sshd 登陸是否會被記錄


日誌記錄:
elk01上登陸root用戶後kibana上的記錄:
beat.name:elk01 beat.hostname:elk01 host.name:elk01 @timestamp:March 13th 2019, 19:03:23.624 message:Mar 13 19:03:17 elk03 sshd[14134]: pam_unix(sshd:session): session opened for user root by (uid=0) prospector.type:log input.type:log beat.version:6.6.1 host.architecture:x86_64 host.os.name:CentOS Linux host.os.codename:Core host.os.platform:centos host.os.version:7 (Core) host.os.family:redhat host.id:a498e2c9c250499a8d68e8f1a980c3f5 host.containerized:true source:/var/log/chenleilei.log offset:1,069,329 log.file.path:/var/log/chenleilei.log _id:u-m4dmkBA26OlE2TnhDS _type:doc _index:filebeat-6.6.1-2019.03.13 _score: -

elk02上登陸root用戶後kibana上的記錄:
message:Mar 13 19:07:48 elk02 sshd[14831]: pam_unix(sshd:session): session opened for user root by (uid=0) @timestamp:March 13th 2019, 19:07:48.707 prospector.type:log input.type:log beat.name:elk01 beat.hostname:elk01 beat.version:6.6.1 host.name:elk01 host.architecture:x86_64 host.os.platform:centos host.os.version:7 (Core) host.os.family:redhat host.os.name:CentOS Linux host.os.codename:Core host.id:a498e2c9c250499a8d68e8f1a980c3f5 host.containerized:true log.file.path:/var/log/chenleilei.log source:/var/log/chenleilei.log offset:1,115,205 _id:wOm8dmkBA26OlE2TqhBM _type:doc _index:filebeat-6.6.1-2019.03.13 _score: -

elk03上登陸root用戶後kibana上的記錄:
message:Mar 13 19:03:17 elk03 sshd[14134]: pam_unix(sshd:session): session opened for user root by (uid=0) @timestamp:March 13th 2019, 19:03:23.624 prospector.type:log input.type:log beat.name:elk01 beat.hostname:elk01 beat.version:6.6.1 host.architecture:x86_64 host.os.name:CentOS Linux host.os.codename:Core host.os.platform:centos host.os.version:7 (Core) host.os.family:redhat host.id:a498e2c9c250499a8d68e8f1a980c3f5 host.containerized:true host.name:elk01 source:/var/log/chenleilei.log offset:1,069,329 log.file.path:/var/log/chenleilei.log _id:u-m4dmkBA26OlE2TnhDS _type:doc _index:filebeat-6.6.1-2019.03.13 _score: -


ssh鏈接到elk03 故意輸錯密碼的記錄:
March 13th 2019, 19:18:11.792   message:Mar 13 19:18:11 elk03 sshd[14921]: Failed password for chenleilei from 10.0.0.71 port 60284 ssh2 @timestamp:March 13th 2019, 19:18:11.792 prospector.type:log input.type:log beat.version:6.6.1 beat.name:elk01 beat.hostname:elk01 host.name:elk01 host.containerized:true host.architecture:x86_64 host.os.name:CentOS Linux host.os.codename:Core host.os.platform:centos host.os.version:7 (Core) host.os.family:redhat host.id:a498e2c9c250499a8d68e8f1a980c3f5 source:/var/log/chenleilei.log offset:1,124,133 log.file.path:/var/log/chenleilei.log _id:yOnGdmkBA26OlE2TLBA5 _type:doc _index:filebeat-6.6.1-2019.03.13 _score: -
------------------------------------------------------------------

登陸記錄:

elk01

elk02

elk03

日誌收集與清除

刪除filebeat收集數據

查看數據:
curl 10.0.0.71:9200/_cat/indices

[root@elk01 ~]# curl 10.0.0.71:9200/_cat/indices
yellow open filebeat-6.6.1-2019.03.13    6piRJ-G_QQ-n8Xjk8oClEQ 3 1   3   0  21.6kb  21.6kb
yellow open filebeat-6.6.1-2019.03.15    _z4Eq8d3Rtm9Ur7W2luQxA 3 1   6   0  52.5kb  52.5kb
green  open .monitoring-es-6-2019.03.14  qVEPYEeHRCil_WTWmZt3wg 1 0 340 147 563.9kb 563.9kb
green  open .kibana_1                    tOEm5-DYRTa94rBzTVyN_g 1 0   4   0  15.6kb  15.6kb
green  open .monitoring-kibana-6-2019.03.14 hkL9pHgMTc6sZIPr9R3izQ 1 0  31   0  52.1kb  52.1kb
yellow open filebeat-6.6.1-2019.03.14       DPeKhOf_RRupSo1iOk_7xA 3 1   9   0  62.9kb  62.9kb

清除數據:
[root@elk01 ~]# curl -XDELETE 10.0.0.71:9200/filebeat-6.6.1-2019.03.13
{"acknowledged":true}    ##---刪除13號數據,出現 {"acknowledged":true} 即刪除成功

清除全部數據:
通配符刪除
[root@elk01 ~]# curl -XDELETE 10.0.0.71:9200/filebeat-6.6.1-2019.03.1*
{"acknowledged":true}
[root@elk01 ~]# curl 10.0.0.71:9200/_cat/indices
green open .kibana_1                       tOEm5-DYRTa94rBzTVyN_g 1 0   4  0  15.6kb  15.6kb
green open .monitoring-kibana-6-2019.03.14 hkL9pHgMTc6sZIPr9R3izQ 1 0  78  0 107.9kb 107.9kb
green open .monitoring-es-6-2019.03.14     qVEPYEeHRCil_WTWmZt3wg 1 0 809 30   516kb   516kb

能夠看到已經所有filebeat數據都被刪除

kibana漢化【可選】

kibana漢化: https://github.com/anbai-inc/Kibana_Hanization

方法:
#yum安裝進入漢化包目錄 /root/test/Kibana_Hanization   [下載不一樣目錄也不同]
#進入目錄後安裝 "/usr/share/kibana/" 是kibana的安裝目錄,根據自身條件來配置:

首先中止kibana服務
systemctl stop kibana.service

下載漢化包:
git clone https://github.com/anbai-inc/Kibana_Hanization
cd Kibana_Hanization-master/

命令:
python main.py "/usr/share/kibana/"

過程:
root@elk01 Kibana_Hanization]# python main.py "/usr/share/kibana/"
文件[/usr/share/kibana/dlls/vendors.bundle.dll.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/canvas/index.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/canvas/canvas_plugin/renderers/all.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/canvas/canvas_plugin/uis/arguments/all.s]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/canvas/canvas_plugin/uis/datasources/al.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/canvas/public/register_feature.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/ml/index.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/ml/public/register_feature.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/spaces/index.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/spaces/public/components/manage_spaces_utton.js]已翻譯。
文件[/usr/share/kibana/node_modules/x-pack/plugins/spaces/public/views/nav_control/componets/spaces_description.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/apm.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/canvas.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/commons.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/infra.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/kibana.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/login.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/ml.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/monitoring.bundle.js]已翻譯。
文件[/usr/share/kibana/optimize/bundles/timelion.bundle.js]已翻譯。
文件[/usr/share/kibana/src/legacy/core_plugins/kibana/server/tutorials/kafka_logs/index.js已翻譯。
文件[/usr/share/kibana/src/ui/public/chrome/directives/global_nav/global_nav.js]已翻譯。
恭喜,Kibana漢化完成!

從新啓動服務:
systemctl start kibana.service 
systemctl status kibana.service

使用elk收集本機全部日誌思路

1) filebeat讀取slow日誌到logstash

2) logstash處理日誌,將全部日誌過濾整理成json格式

​   grok是使得無結構的日誌結構化和可查詢的最好插件

3)將json日誌發送給slasticsearch

4)kibana經過索引獲取日誌而且及逆行展現

apache日誌收集配置

安裝:
yum -y install  httpd
systemctl start  httpd.service日誌:



apache日誌:
tailf  /var/log/httpd/access_log
清除filebbeat日誌:
curl 10.0.0.71:9200/_cat/indices      ##查看現有數據

curl -XDELETE 10.0.0.71:9200/.monitoring-es-6-2019.03.18    ##刪除現有數據

還可使用 * 來匹配刪除
curl -XDELETE 10.0.0.71:9200/.monitoring-es-6-2019.03.1*
curl -XDELETE 10.0.0.71:9200/.monitoring-kibana-6-2019.03.1*

apache日誌配置

設置apache 日誌爲 json

設置filebeat讀取日誌,按照json格式給elastic

kibana讀取elastic日誌

apache默認安裝日誌地址:/var/log/httpd/access_log

配置思路: 
1. 修改filebeat.yml文件 而後啓動filebeat
2. curl 10.0.0.71:9200/_cat/indices  查看索引
3. curl -XDELETE 10.0.0.71:9200/.monitoring-es-6-2019.03.18   刪除全部索引



安裝filebeat:
rpm -ivh ~/filebeat-6.6.1-x86_64.rpm    [這是安裝本地下載的包,也能夠yum來安裝]

配置filebeat傳送日誌給服務器:
cp /etc/filebeat/filebeat.yml{,.bak_$(date \+%F)} ##備份
vim /etc/filebeat/fields.yml    ##編輯配置

找到 大約 158行  : 
找到 :  Filebeat inputs 段

更改此段:
----------------------------------------
filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: false
------------------------------------------

改成:
filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
#  enabled: false
  enabled: true                                 #-----指定開啓日誌收集(別忘了)

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
    - /var/log/httpd/access_log     ------指定access日誌地址[同時這裏能夠指定多個日誌文件,如再指定一個/var/log/chenleilei.log]
    #- c:\programdata\elasticsearch\logs\*
    json.keys_under_root: true      -----新增行
    json.overwrite_keys: true       -----新增行



找到大約150行的 Elasticsearch output  將日誌傳輸給Elasticsearch
修改:
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]
改成:
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["10.0.0.71:9200"]
  
  
  
 刪除索引:
 curl 10.0.0.71:9200/_cat/indices     ###查看索引
 curl -XDELETE 10.0.0.71:9200/*      ###刪除全部索引
 
 特別注意:若是索引被清除,客戶端須要從新啓動filebeat,並訪問一次apache來生成新的索引! 不然添加索引時 沒法選擇索引
 
 刪除網頁數據:
 點擊 Management  點擊 kibana下的 Index Patterns
  
 修改完成後 重啓 filebeat:
  systemctl restart filebeat.service


查看日誌檢查服務是否啓動成功:
[root@elk03 ~]# tailf /var/log/messages

Mar 21 11:31:34 elk03 systemd: Started Filebeat sends log files to Logstash or directly to Elasticsearch..
Mar 21 11:31:34 elk03 systemd: Starting Filebeat sends log files to Logstash or directly to Elasticsearch....   正確啓動

kibana配置:

kibana 建立索引
建立索引 在filebeat中
Management  ---  Kibana  --- Create index pattern  --- 勾選左邊的 include system indices

Step 1 of 2: Define index pattern
filebeat-*       【匹配filebeat數據】

Step 2 of 2: Configure settings
@timestamp       【使用時間來匹配】  點擊Next step 下一步

點擊 - Create index pattern

第二步:

選擇: I don't want to use the Time Filter

配置完成後 在 Discover中查看是否正確收集了 access.log的日誌

@timestamp:March 21st 2019, 12:11:37.627 beat.name:elk03 beat.hostname:elk03 beat.version:6.6.1 host.name:elk03 host.architecture:x86_64 host.os.platform:centos host.os.version:7 (Core) host.os.family:redhat host.os.name:CentOS Linux host.os.codename:Core host.id:a498e2c9c250499a8d68e8f1a980c3f5 host.containerized:true source:/var/log/httpd/access_log offset:10,246 log.file.path:/var/log/httpd/access_log message:10.0.0.1 - - [21/Mar/2019:12:11:27 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.woff HTTP/1.1" 404 241 "http://10.0.0.73/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" prospector.type:log input.type:log _id:ZY9ynmkBaEsJa_kWg44K _type:doc _index:filebeat-6.6.1-2019.03.21 _score: -

看到這樣基本能夠證明 日誌被正確收集到了

第三步: 分析access.log

kibana繪圖: 定義字段 製做圖表[定義json] 定義apache日誌格式爲 json格式

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
CustomLog "logs/access_log" apache_json

該代碼段插入到access配置文件/etc/httpd/conf/httpd.conf 中 約 202行 </IfModule> 標籤下方



寫入完成後 清空apache訪問日誌
>/etc/httpd/logs/access_log

systemctl start httpd.service
systemctl status  httpd.service


檢查日誌是否正確[啓動apache後 打開窗口刷新  而後經過tailf 來查看日誌樣式是否改變爲json]
tailf /var/log/httpd/access_log 
[root@elk03 ~]# tailf /var/log/httpd/access_log 
{      "@timestamp": "2019-03-21T13:53:32+0800",       "@version": "1",        "tags":["apache"],      "message": "10.0.0.1 - - [21/Mar/2019:13:53:32 +0800] \"GET / HTTP/1.1\" 403 4897",     "clientip": "10.0.0.1",     "duration": 2057,    "status": 403,     "request": "/",     "urlpath": "/",     "urlquery": "",     "bytes": 4897,      "method": "GET",        "site": "10.0.0.73",         "referer": "-",        "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"      }
10.0.0.1 - - [21/Mar/2019:13:53:32 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"

這樣已經就被定義爲了 json格式了

去kibana中檢查數據是否收集成功:

至此 apache 日誌已經收集完成,若是收集有問題 就中止 filebeat 刪除索引 而後從新添加一次索引便可,特別注意:若是索引被清除,客戶端須要從新啓動filebeat,並訪問一次apache來生成新的索引! 不然添加索引時 沒法選擇索引

apache數據創建圖表:

注意 只有日誌格式更改成了json格式才能夠輸出圖表 不然 圖表時沒法輸出的

kibana頁面中點擊選擇 Visualize – 「Create a visualization」 - 找到餅圖 圖標

選擇下面標識的項目

設置好了後 點擊 開始的圖標

查看效果

配置沒有問題能夠點擊save 保存圖表,若是沒有出現這樣 出現的是 3個圖 那麼 你多訪問幾回 正常頁面和錯誤頁面

而後保存的時候取一個名字:

這樣就配置好了圖表:

注意: 若是發現狀態碼沒法輸出 多是添加索引的時候選擇了 @timestamp , 你應該選擇 i don't want to use the Time Filter 而後點擊 Create index pattern 來建立圖表。 不然就不會有狀態碼顯示 這樣你也沒法做圖

創建儀表盤,將圖標增長到儀表盤中

點擊: Dashboard –— 點擊 add 按鈕 –– 選擇剛纔的 apache_status — 點擊頂部的 Save -- 取個名字保存

到這裏 apache日誌日誌收集完成

nginx日誌收集配置

​ 注意:默認安裝的nginx 首頁文件在: /usr/share/nginx/html/.

日誌定義爲json格式:
log_format main_json '{"@timestamp":"$time_local",'
'"N_client_ip": "$remote_addr",'
'"N_request": "$request",'
'"N_request_time": "$request_time",'
'"N_status": "$status",'
'"N_bytes": "$body_bytes_sent",'
'"N_user_agent": "$http_user_agent",'
'"N_x_forwarded": "$http_x_forwarded_for",'
'"N_referer": "$http_referer"'
'}';
access_log logs/access.log main_json;

將此格式插入到nginx配置文件中

默認安裝的nginx 配置文件在 /etc/nginx/nginx.conf

vim /etc/nginx/nginx.conf

註釋默認日誌格式:
#    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                      '$status $body_bytes_sent "$http_referer" '
#                      '"$http_user_agent" "$http_x_forwarded_for"';

改成:
#-----------------------------------------------
#    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                      '$status $body_bytes_sent "$http_referer" '
#                      '"$http_user_agent" "$http_x_forwarded_for"';

    log_format main_json '{"@timestamp":"$time_local",'
    '"N_client_ip": "$remote_addr",'
    '"N_request": "$request",'
    '"N_request_time": "$request_time",'
    '"N_status": "$status",'
    '"N_bytes": "$body_bytes_sent",'
    '"N_user_agent": "$http_user_agent",'
    '"N_x_forwarded": "$http_x_forwarded_for",'
    '"N_referer": "$http_referer"'
    '}';

    access_log  /var/log/nginx/access.log   main_json;
#    access_log  /var/log/nginx/access.log  main;
#-----------------------------------------------

改好後清除默認nginx日誌文件內容
>/var/log/nginx/access.log

檢查日誌是否改成json

{"@timestamp":"23/Mar/2019:03:41:34 +0800","N_client_ip": "10.0.0.1","N_request": "GET / HTTP/1.1","N_request_time": "0.000","N_status": "304","N_bytes": "0","N_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36","N_x_forwarded": "-","N_referer": "-"}

默認日誌格式已經改成了 json格式。

從新定義filebeat索引[服務器客戶端都須要配置]

vim /etc/filebeat/filebeat.yml

大約在 154 行 從新定義 Elasticsearch output 從新定義索引

output.elasticsearch: 字段上方添加:

setup.template.name: "web_chenleilei_com"
setup.template.pattern: "web_chenleilei_com_"
output.elasticsearch:
# Array of hosts to connect to.


hosts: ["10.0.0.71:9200"]  字段下方添加:

index: "web_chenleilei_com_%{+yyyy.MM.dd}"

修改完成後保存退出 重啓 filebeat
systemctl restart filebeat.service

必定要檢查狀態確保啓動正常:
systemctl status filebeat.service

刪除filebeat的索引

curl 10.0.0.71:9200/_cat/indices   查看索引
curl -XDELETE 10.0.0.71:9200/filebeat-*   刪除filebeat索引

重啓filebeat 訪問一下網站從新生成索引
ansible all -m shell -a "systemctl restart filebeat"

生成新的索引:

Management  --  Kibana  --- [新索引名 實驗配置的是 web_chenleilei_com_2019.03.23 ]


Step 1 of 2: Define index pattern
Index pattern
   web_chenleilei_com_*       ------ 【定義新索引】  點擊 Next step 下一步 

而後重啓服務便可。

多日誌收集:

nginx日誌和apache日誌收集配置

多日誌收集修改配置文件 filebeat.yml

vim /etc/filebeat/filebeat.yml
#=========================== Filebeat input ------------------------------
- type: log

  enabled: true
  paths:
    - /var/log/httpd/access_log
  json.keys_under_root: true
  json.overwrite_keys: true


- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log

  json.keys_under_root: true
  json.overwrite_keys: true
#=========================== Filebeat input ------------------------------


多臺服務器收集,定位主機 配置:
#=========================== Filebeat input ------------------------------
vim /etc/filebeat/filebeat.yml

setup.template.name: "elk02_web_chenleilei_com"           ####這裏自定義能夠用於區別主機
setup.template.pattern: "elk02_web_chenleilei_com_"       ####這裏自定義能夠用於區別主機
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["10.0.0.71:9200"]
  index: "elk02_web_chenleilei_com_%{+yyyy.MM.dd}"       ####這裏自定義能夠用於區別主機
#=========================== Filebeat input ------------------------------



修改完成後 從新啓動filebeat,再次同步日誌,會發現會有變化
systemctl restart  filebeat


服務器上刪除多餘的收集數據
curl -XDELETE 10.0.0.71:9200/web_chenleilei_com_2019.03.23

重建索引,重啓filebeat

這樣日誌就會以索引名命名,這個命名是在添加elk日誌來源的時候匹配的

這樣配置後就能夠收到多臺服務器的不一樣日誌了 在查閱的時候能夠按照主機來查詢日誌。

多圖表展現:

使用kibana繪圖來繪製餅圖和圖表展現

若是要作這個 須要先收集到這兩個服務的日誌而且 web服務開啓

kibana - vsiualize  添加apache圖表   添加nginx圖表 點擊Dashboard - Add a filter 添加圖表
選擇已經制做好的兩張圖添加保存便可
elk多日誌收集配置:
elk多日誌收集 是指在每臺filebeat中配置不一樣的索引 讓服務器獲取,這樣便可區分服務器

如何區分一臺服務器中多日誌收集中的 apache nginx兩個服務的日誌?
apache定義:
-----------------------------------
LogFormat "{ \
\"@timestamp\": \"%{%Y-%m-%dT%H:%M:%S%z}t\", \
\"@version\": \"1\", \
\"tags\":[\"apache\"], \
\"message\": \"%h %l %u %t \\\"%r\\\" %>s %b\", \
\"A_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
CustomLog "logs/access_log" apache_json
-------------------------------------
這裏的 A_clientip  就是用於區分服務的  這裏能夠改成  APACHE_clientip 
nginx 定義時改成:

log_format main_json '{"@timestamp":"$time_local",'
'"N_client_ip": "$remote_addr",'
'"N_request": "$request",'
'"N_request_time": "$request_time",'
'"N_status": "$status",'
'"N_bytes": "$body_bytes_sent",'
'"N_user_agent": "$http_user_agent",'
'"N_x_forwarded": "$http_x_forwarded_for",'
'"N_referer": "$http_referer"'
'}';

access_log  /var/log/nginx/access.log   main_json;

這樣 在日式收集時  A_clientip 爲apache的日誌   N_clientip 爲nginx日誌

mysql slow 慢日誌收集配置

架構圖:

收集思路:
filebeat收集日誌傳給logstash
使用logstash 處理mysql slow日誌 處理生成爲json格式
將處理好爲json的日誌發送給elasticsearch
kibana經過索引獲取日誌並進行展現

grok案例:

日誌內容:
2016-09-19T18:19:00 [8.8.8.8:prd] DEBUG this is an example log message

grok格式:
%{TIMETAMP_ISO8601:timestamp} \[%{IPV4:ip};%{WORD:environment}\] %{LOGLEVEL:log_level} %{GREEDYDATA:message}

json格式:
{
    "timestamp": "2016-09-19T18:19:00",
    "ip": "8.8.8.8",
    "envronment": "prd",
    "log_level": "DEBUG",
    "message":"this is an example log message"
}

kibana初始化環境

curl 127.0.0.1:9200/cat/indices   
curl -XDELETE 127.0.0.1:9200/cat/logstash-*
slow log日誌收集案例:
slow log日誌開啓方法
vim /etc/my.cnf
---------------------------------------------------------
[mysqld]
slow_query_log
long_query_time = 2
slow_query_log_file = "/application/mysql/tmp/slow.log"
---------------------------------------------------------

這樣就可已經開了慢日誌,如今須要製造數據,讓他有慢日誌

vim /etc/my.cnf

建立數據:
seq 1 19999999 >/tmp/1.sql

查看建立的數據大小:
[root@elk02 ~]# ls -lh /tmp/1.sql 
-rw-r--r-- 1 root root 162M Mar 27 03:23 /tmp/1.sql


進入數據庫建立測試庫和表
create database db1;
use db1;
create table t1 (id int(10)not null)engine=innodb;

在數據庫中導入數據:
LOAD DATA LOCAL INFILE '/tmp/1.sql' INTO TABLE t1;
mysql> LOAD DATA LOCAL INFILE '/tmp/1.sql' INTO TABLE t1;
Query OK, 19999999 rows affected (29.89 sec)
Records: 19999999  Deleted: 0  Skipped: 0  Warnings: 0

從新開啓一個窗口監視慢查詢日誌:tailf /application/mysql/tmp/slow.log

執行查詢:
mysql>  * from db1.t1 where id=991;

查看日誌:
# Time: 190327  3:25:52
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 6.258646  Lock_time: 0.000067 Rows_sent: 1  Rows_examined: 19999999
SET timestamp=1553628352;
SELECT * from db1.t1 where id=931;   看到這些表明慢日誌開啓成功
收集slow日誌

第一步: 配置filebeat讀取slow日誌到logstash [filebeat配置完成不用啓動,等logstsh配置完成啓動後再啓動]

vim /etc/filebeat/filebeat.yml
1. 找到Filebeat inputs 項
添加:
- type: log
  enabled: true
  paths:
    - /application/mysql/tmp/slow.log
  json.keys_under_root: true
  json.overwrite_keys: true



- type: log
  enabled: true
  paths:
    - /application/mysql/tmp/slow.log
  multiline.pattern: '^\# Time|^\# User'
 # multiline.pattern: "^# User@Host:"
  multiline.negate: true
  multiline.match: after
 # tail_files: true



2. 找到 Logstash output 項

#----------------------------- Logstash output --------------------------------
#添加:
output.logstash: 
output.logstash:
  # The Logstash hosts
  hosts: ["10.0.0.72:5044"]
  multiline.pattern: "^# User@Host:"
  multiline.negate: true
  multiline.match: after

  
 注意: 這裏是指的 logstash 安裝在哪臺服務器就由哪臺服務器來處理這個日誌,由於我直接安裝在了本機 我本機IP地址是10.0.0.72 因此我這裏就寫了這個地址,若是在其餘機器上應該換成其餘IP地址
 
3. 注意若是有別的輸出 好比:配置過輸出給filebeat 那麼 你須要關閉後 選擇輸出給logstash才行。不然就會失敗
關閉file beat中其餘的日誌輸出,選擇輸出到logstash,重啓filebeat,重啓失敗則沒有關閉其餘輸出或配置失敗

第二步:安裝logstash【注意必須是JDK1.8 版本,不然報錯,而且配置輸出給logstsh,配置filebeat就失敗】

下載logstash:
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz

沒法下載能夠直接去官方下載
https://www.elastic.co/downloads/logstash

或者yum安裝
yum install -y logstash

mkdir -p /server/tools/
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.1.1.tar.gz
tar xf logstash-6.1.1.tar.gz -C /usr/local/logstash/
cd ..
mv logstash-6.1.1/* ./
rm -rf logstash-6.1.1/
cd /usr/local/logstash

注意:
/usr/local/logstash/config/jvm.options  文件是用來控制運行時所需內存的,若是沒法運行能夠嘗試下降內存

更改這兩項便可
-Xms1g
-Xmx1g


測試logstash [必須測試]

測試命令:
/usr/local/logstash/bin/logstash -e 'input { stdin { } } output{ stdout { } }' 
注意:運行後若是有ERROR 則證實有問題,須要排查,若是沒有問題會輸出計算機名

測試沒有問題執行啓動:【經過 bg查看後臺程序,經過fg + 序號進入後臺程序】
/usr/local/logstash/bin/logstash -e 'input { stdin { } } output{ stdout { } }' &&

正確案例:
---------------------------
[root@elk02 local]# /usr/local/logstash/bin/logstash -e 'input { stdin { } } output{ stdout { } }'
Sending Logstash's logs to /usr/local/logstash/logs which is now configured via log4j2.properties
[2019-03-27T04:31:08,982][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"fb_apache", :directory=>"/usr/local/logstash/modules/fb_apache/configuration"}
[2019-03-27T04:31:09,006][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"netflow", :directory=>"/usr/local/logstash/modules/netflow/configuration"}
[2019-03-27T04:31:09,675][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-03-27T04:31:10,657][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.1.1"}
[2019-03-27T04:31:11,098][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
[2019-03-27T04:31:13,311][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125, :thread=>"#<Thread:0x2da61092 run>"}
[2019-03-27T04:31:13,406][INFO ][logstash.pipeline        ] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2019-03-27T04:31:13,527][INFO ][logstash.agent           ] Pipelines running {:count=>1, :pipelines=>["main"]}

2019-03-26T20:31:57.624Z elk02      ####----這裏輸出了計算機名

而且也會有個9600端口開啓信息:Successfully started Logstash API endpoint {:port=>9600}
---------------------------    


錯誤案例:
---------------------------
[root@elk02 config]# /usr/local/logstash/bin/logstash -e 'input { stdin { } } output{ stdout { } }'
2019-03-27 04:27:10,886 main ERROR Unable to locate appender "${sys:ls.log.format}_console" for logger config "root"
2019-03-27 04:27:10,886 main ERROR Unable to locate appender "${sys:ls.log.format}_rolling" for logger config "root"
2019-03-27 04:27:10,887 main ERROR Unable to locate appender "${sys:ls.log.format}_rolling_slowlog" for logger config "slowlog"
2019-03-27 04:27:10,887 main ERROR Unable to locate appender "${sys:ls.log.format}_console_slowlog" for logger config "slowlog"
2019-03-27 04:27:15,090 main ERROR Unable to locate appender "${sys:ls.log.format}_console" for logger config "root"
2019-03-27 04:27:15,091 main ERROR Unable to locate appender "${sys:ls.log.format}_rolling" for logger config "root"
2019-03-27 04:27:15,091 main ERROR Unable to locate appender "${sys:ls.log.format}_rolling_slowlog" for logger config "slowlog"
2019-03-27 04:27:15,091 main ERROR Unable to locate appender "${sys:ls.log.format}_console_slowlog" for logger config "slowlog"
---------------------------
緣由: 權限沒有配置正確
解決: chown  -R root.root logstash


錯誤案例2:
-------------------------------------
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config.d/logstash_to_elasticsearch.conf
Sending Logstash logs to /usr/local/logstash/logs which is now configured via log4j2.properties
[2019-03-28T22:07:36,736][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-03-28T22:07:36,819][FATAL][logstash.runner          ] Logstash could not be started because there is already another instance using the configured data directory.  If you wish to run multiple instances, you must change the "path.data" setting.
[2019-03-28T22:07:36,874][ERROR][org.logstash.Logstash    ] java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit
-------------------------------------
緣由:已經有一個進程啓用,關閉後重啓就好




配置正確後 回車 會出現定義好的json日誌
沒有json日誌說明錯誤:
錯誤案例:
回車 出現計算機名: 2019-03-26T21:03:46.015Z elk02   [logstash-6.1.1.tar 不能出現正確配置]
建議使用:logstash-6.7.0.tar.gz


正確配置:

{
          "host" => "elk02",
       "message" => "",
    "@timestamp" => 2019-03-26T22:52:07.374Z,
      "@version" => "1"
}

測試截圖:

第四步: 編寫logstash配置文件:

[root@elk02 logstash]# pwd
/usr/local/logstash
[root@elk02 logstash]# mkdir config.d
[root@elk02 logstash]# cp config/logstash-sample.conf  ./config.d/
[root@elk02 logstash]# cd /config.d/
[root@elk02 config.d]# cp logstash-sample.conf logstash_to_elasticsearch.conf

編輯配置文件:
[root@elk02 config.d]# vim logstash_to_elasticsearch.conf
修改前:
input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}



修改後:

input {
  beats {
    port => 5044
  }
}

#=====grok正則=========
filter {
grok {
match => [ "message", "(?m)^# User@Host: %{USER:query_user}\[[^\]]+\] @ (?:(?<query_host>\S*) )?\[(?:%{IP:query_ip})?\]\s+Id:\s+%{NUMBER:id:int}\s# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\s*(?:use %{DATA:database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<query>(?<action>\w+)\s+.*)" ]
}
grok {
match => { "message" => "# Time: " }
add_tag => [ "drop" ]
tag_on_failure => []
}
if "drop" in [tags] {
drop {}
}
date {
match => ["mysql.slowlog.timestamp", "UNIX", "YYYY-MM-dd HH:mm:ss"]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
ruby {
code => "event.set('[@metadata][today]', Time.at(event.get('@timestamp').to_i).localtime.strftime('%Y.%m.%d'))"
}
mutate {
remove_field => [ "message" ]
}
}
#=====grok正則=========

output {
  elasticsearch {
    hosts => ["http://10.0.0.71:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
 
 
stdout {
  codec => rubydebug
        }

}



解釋:
hosts => ["http://localhost:9200"]  ## elasticsearch服務器地址
%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd} : 這裏自定義索引名

配置完成啓動測試:
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config.d/logstash_to_elasticsearch.conf


能夠添加一個輸出到屏幕[測試使用,能夠不用]:
編輯 /usr/local/logstash/config.d/logstash_to_elasticsearch.conf 配置文件
刪除尾部一個 } 再尾部添加:

stdout {
codec => rubydebug
        }
}


最終結果:

input {
  beats {
    port => 5044

  }
}

#--->> 這裏是 slow日誌正則內容  =================
filter {
grok {
match => [ "message", "(?m)^# User@Host: %{USER:query_user}\[[^\]]+\] @ (?:(?<query_host>\S*) )?\[(?:%{IP:query_ip})?\]\s+Id:\s+%{NUMBER:id:int}\s# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\s*(?:use %{DATA:database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<query>(?<action>\w+)\s+.*)" ]
}
grok {
match => { "message" => "# Time: " }
add_tag => [ "drop" ]
tag_on_failure => []
}
if "drop" in [tags] {
drop {}
}
date {
match => ["mysql.slowlog.timestamp", "UNIX", "YYYY-MM-dd HH:mm:ss"]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
ruby {
code => "event.set('[@metadata][today]', Time.at(event.get('@timestamp').to_i).localtime.strftime('%Y.%m.%d'))"
}
mutate {
remove_field => [ "message" ]
}
}

#--->> 這裏是 slow日誌正則內容  =================

output {
  elasticsearch {
    hosts => ["http://10.0.0.71:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
 
 
stdout {
  codec => rubydebug
        }
 
}

===========================


添加完成保存退出後從新啓動:
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config.d/logstash_to_elasticsearch.conf

啓動成功標識:  【Successfully started Logstash】
[2019-03-27T07:30:12,978][INFO ][org.logstash.beats.Server] Starting server on port: 5044
[2019-03-27T07:30:13,539][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}


這裏會出現問題 也能夠經過日誌進行分析:
vim /usr/local/logstash/logs/logstash-plain.log


如今能夠進行slow日誌觸發測試:
------------------- 一條正確配置產生的 slow日誌----------------------------
{
             "host" => {
         "architecture" => "x86_64",
                 "name" => "elk02",
                   "id" => "a498e2c9c250499a8d68e8f1a980c3f5",
        "containerized" => true,
                   "os" => {
              "family" => "redhat",
                "name" => "CentOS Linux",
            "codename" => "Core",
            "platform" => "centos",
             "version" => "7 (Core)"
        }
    },
    "rows_examined" => 19999999,
        "timestamp" => "1553787824",
            "input" => {
        "type" => "log"
    },
             "beat" => {
            "name" => "elk02",
         "version" => "6.6.1",
        "hostname" => "elk02"
    },
       "@timestamp" => 2019-03-28T15:43:52.927Z,
       "query_host" => "localhost",
           "action" => "SELECT",
       "query_user" => "root",
       "prospector" => {
        "type" => "log"
    },
              "log" => {
         "file" => {
            "path" => "/application/mysql/tmp/slow.log"
        },
        "flags" => [
            [0] "multiline"
        ]
    },
               "id" => 5,
        "rows_sent" => 1,
            "query" => "SELECT * from db1.t1 where id=1018;",
             "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
           "offset" => 8271,
        "lock_time" => 0.000123,
         "@version" => "1",
       "query_time" => 13.037563,
           "source" => "/application/mysql/tmp/slow.log"
}
------------------- 一條正確配置產生的 slow日誌----------------------------
kibana展現slow日誌數據:

索引定義 vim /usr/local/logstash/config.d/logstash_to_elasticsearch.conf

output {
  elasticsearch {
    hosts => ["http://10.0.0.71:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
  
改成:
output {
  elasticsearch {
    hosts => ["http://10.0.0.71:9200"]
    index => "slow_%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }


這樣改完後 作一條查詢後 經過curl 取數據你會發現你定義的日誌
[root@elk01 ~]# curl 10.0.0.71:9200/_cat/indices
yellow open filebeat-6.6.1-2019.03.28       QELr3ipjRwuItb9w-T3PNA 3 1    7  0   101kb   101kb
green  open .kibana_2                       t7UGRQ-ORh6zx8MHW2sJvw 1 0    5  1  77.8kb  77.8kb
green  open .tasks                          k15Ws9ahSUmy7uDy6cRmfg 1 0    1  0   6.2kb   6.2kb
green  open .monitoring-kibana-6-2019.03.28 -Hx4Oo8bQTGfpBEslpX6eg 1 0 2136  0 603.5kb 603.5kb
green  open .kibana_1                       wyxOPjgOSVulciZCV_8qeQ 1 0    4  0  12.7kb  12.7kb
green  open .monitoring-es-6-2019.03.28     AOnWxe0aSB6qa77Wcdd0vQ 1 0 7551 87     4mb     4mb
yellow open slow_filebeat-6.6.1-2019.03.28  _-O06Iv4Tr-sEjD4Up131Q 5 1    1  0  20.4kb  20.4kb

slow日誌收集結果:

#### kibana展現SLOW日誌數據:

索引定義 vim /usr/local/logstash/config.d/logstash_to_elasticsearch.conf

output {
  elasticsearch {
    hosts => ["http://10.0.0.71:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
  
改成:
output {
  elasticsearch {
    hosts => ["http://10.0.0.71:9200"]
    index => "slow_%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }



這樣改完後 作一條查詢後 經過curl 取數據你會發現你定義的日誌
[root@elk01 ~]# curl 10.0.0.71:9200/_cat/indices
yellow open filebeat-6.6.1-2019.03.28       QELr3ipjRwuItb9w-T3PNA 3 1    7  0   101kb   101kb
green  open .kibana_2                       t7UGRQ-ORh6zx8MHW2sJvw 1 0    5  1  77.8kb  77.8kb
green  open .tasks                          k15Ws9ahSUmy7uDy6cRmfg 1 0    1  0   6.2kb   6.2kb
green  open .monitoring-kibana-6-2019.03.28 -Hx4Oo8bQTGfpBEslpX6eg 1 0 2136  0 603.5kb 603.5kb
green  open .kibana_1                       wyxOPjgOSVulciZCV_8qeQ 1 0    4  0  12.7kb  12.7kb
green  open .monitoring-es-6-2019.03.28     AOnWxe0aSB6qa77Wcdd0vQ 1 0 7551 87     4mb     4mb
yellow open slow_filebeat-6.6.1-2019.03.28  _-O06Iv4Tr-sEjD4Up131Q 5 1    1  0  20.4kb  20.4kb

定義完成就能夠去kibana中添加數據:
選擇: Management — Kibana -—- Create index pattern

Step 1 of 2: Define index pattern

Index pattern: slow_* 匹配到 定義好的日誌 點擊:Next step

Step 2 of 2: Configure settings

Time Filter field name 下拉框中選擇 I don't want to use the Time Filter

而後點擊 Create index pattern

定義好了後 去查看:

Discover 頁面 切換到 slow_*

查看日誌:

測試生成一條慢日誌後在查詢:

數據庫中查詢一條數據:

頁面中查看:

kibana圖表展現:

選擇:Visualize - New - Choose search source

點擊

開始顯示數據:

確認沒有問題,保存

取名:

添加到儀表盤:

點擊左邊菜單: Dashboard 用於添加儀表盤

這樣就成功收集了數據,並完成儀表盤製做

至此,slow日誌收集完成

tomcat日誌收集

待續...

相關文章
相關標籤/搜索