##ELK服務日誌收集系統
日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員能夠經過日誌瞭解服務器軟硬件信息、檢查配置過程當中的錯誤及錯誤發生的緣由。常常分析日誌能夠了解服務器的負荷,性能安全性,從而及時採起措施糾正錯誤。html
一般,日誌被分散的儲存不一樣的設備上。若是你管理數十上百臺服務器,你還在使用依次登陸每臺機器的傳統方法查閱日誌。這樣是否是感受很繁瑣和效率低下。當務之急咱們使用集中化的日誌管理,例如:開源的syslog,將全部服務器上的日誌收集彙總。java
集中化管理日誌後,日誌的統計和檢索又成爲一件比較麻煩的事情,通常咱們使用grep、awk和wc等Linux命令能實現檢索和統計,可是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法不免有點力不從心。node
開源實時日誌分析ELK平臺可以完美的解決咱們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:https://www.elastic.co/products
###1、Elasticsearch
是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
1. 安裝下載tar複製到服務器,解壓後cd /bin 文件夾下。
2. 初次啓動當使用root帳戶調用啓動命令出現錯誤信息,錯誤提示信息以下:redis
[2017-08-30T13:32:17,003][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [ELK-node1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.5.2.jar:5.5.2]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:194) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:351) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.5.2.jar:5.5.2]
... 6 morejson
3.因爲Elasticsearch能夠接收用戶輸入的腳本而且執行,爲了系統安全考慮,不容許root帳號啓動,因此建議給Elasticsearch單首創建一個用戶來運行Elasticsearch。
- 一、命令格式 useradd ymq(用戶名) -g ymq(所屬組名) -p ymq(密碼)
groupadd ymq
useradd ymq -g ymq -p ymq
- 二、 受權訪問組權限
命令格式: chown -R ymq(所屬用戶) : ymq(所屬用戶組名) /opt/elasticsearch-5.5.2 (要更改的文件路徑)
chmod 777 /etc/sudoers
vi /etc/sudoers
- 三、 受權 root 權限 命令格式: ymq 用戶 root 權限 NOPASSWD意思是 不用輸密碼
chmod 777 /etc/sudoers
vi /etc/sudoers
root ALL=(ALL) ALL
#添加ymq 用戶 root 權限
ALL=(ALL) NOPASSWD:ALL
pkexec chmod 0440 /etc/sudoers
su ymq
/opt/elasticsearch-5.5.2/bin/elasticsearch
- 四、具體參考https://www.jianshu.com/p/365db8b181cc
- http://blog.csdn.net/liangzhao_jay/article/details/56840941
- 五、到bin 輸入:elasticsearch啓動
- 六、後臺啓動 elasticsearch -dbootstrap
--------------
###2、Logstash 日誌收集
![](http://static.oschina.net/uploads/space/2015/1218/124206_UKKk_1434710.png)
其實它就是一個收集器而已,咱們須要爲它指定Input和Output(固然Input和Output能夠爲多個)。因爲咱們須要把Java代碼中Log4j的日誌輸出到ElasticSearch中,所以這裏的Input就是Log4j,而Output就是ElasticSearch。
固然它能夠單獨出現,做爲日誌收集軟件,你能夠收集日誌到多種存儲系統或臨時中轉系統,如MySQL,redis,kakfa,HDFS, lucene,solr等並不必定是ElasticSearch。
![](http://img.blog.csdn.net/20161122031718922)
####1、安裝
1. 解壓文件 tar -zxvf logstash-xxx
2. cd 到文件解壓後的文件夾下,看是否有config 文件夾(文件夾名稱無所謂,主要是爲爲了放置配置文件)
3. 寫一個xxxx.conf 的配置文件,配置收集器的輸入和輸出
4. 若是出現未安裝插件的錯誤到https://www.elastic.co/guide/en/logstash/current/input-plugins.html 下載相應的插件
5. 啓動: 到bin 下 logstash -f xxxx.conf 路徑
6. 啓動後能夠輸入數據
####2、配置安全
1. 基礎input { stdin { } } output { stdout {} }
- input 是數據的輸入,stdin 標準輸入, 即在開啓logstash後從命令框中數據數據
- output 是配置數據的輸出 stdout 是標準輸出,會將數據打印在命令框中顯示
2. 添加插件輸出
input{
stdin{}
}
output{
elasticsearch{
hosts => "127.0.0.1"
}
stdout{codec => rubydebug}
}
- elasticsearch 輸出到elasticsearch中 hosts 配置屬性
- 後臺運行ruby
nohup logstash -f /usr/local/logstash/config/logstash1.conf >/dev/null 2>&1&服務器
----------
###3、FileBeat
Filebeat是一個日誌文件託運工具,在你的服務器上安裝客戶端後,filebeat會監控日誌目錄或者指定的日誌文件,追蹤讀取這些文件(追蹤文件的變化,不停的讀),而且轉發這些信息到elasticsearch或者logstarsh中存放。restful
如下是filebeat的工做流程:當你開啓filebeat程序的時候,它會啓動一個或多個探測器(prospectors)去檢測你指定的日誌目錄或文件,對於探測器找出的每個日誌文件,filebeat啓動收割進程(harvester),每個收割進程讀取一個日誌文件的新內容,併發送這些新的日誌數據處處理程序(spooler),處理程序會集合這些事件,最後filebeat會發送集合的數據到你指定的地點。
(我的理解,filebeat是一個輕量級的logstash,當你須要收集信息的機器配置或資源並非特別多時,使用filebeat來收集日誌。平常使用中,filebeat十分穩定,筆者沒遇到過宕機。)
![](https://images2015.cnblogs.com/blog/997621/201612/997621-20161227223331070-312389171.png)
####第一步:安裝filebeat
請選擇你係統中的下載安裝命令來下載安裝filebeat。(deb for Debian/Ubuntu, rpm for Redhat/Centos/Fedora, mac for OS X, and win for Windows).
若是你使用yum或者apt,你能夠從咱們的安裝倉庫中更方便的安裝或更新到新版本。
- deb:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
sudo dpkg -i filebeat-5.1.1-amd64.deb
- rpm:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
sudo rpm -vi filebeat-5.1.1-x86_64.rpm
- mac:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-darwin-x86_64.tar.gz
tar xzvf filebeat-5.1.1-darwin-x86_64.tar.gz
- win:
####第二步:配置filebeat
編輯配置文件來配置filebeat,對於rpm或者deb來講,配置文件是/etc/filebeat/filebeat.yml這個文件,對於MAC或者win來講,請查看你的解壓文件中。
這裏有一個簡單的filebeat的配置文件filebeat.yml的樣本,filebeat會使用不少默認的選項。
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
- c:\programdata\elasticsearch\logs\*
- 讓咱們來配置filebeat:
1. 定義你的日誌文件的路徑(一個或多個)
對於大多數的基本filebeat配置,你能夠定義一個單一探測器針對一個單一的路徑,例如:
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
#json.keys_under_root: true 若收取日誌格式爲json的log,請開啓此配置
2. 在這個例子中,探測器會收集/var/log/*.log的全部匹配文件,這意味這filebeat會手機全部的/var/log下以.log結尾的文件,此處還支持Golang Glob支持的全部模式。
3. 在預約義級別的子目錄中獲取全部文件,可使用這個配置:/var/log/*/*.log,這會找到/var/log下全部子目錄中全部的以.log結尾的文件。但它並不會找到/var/log文件夾下的以.log結尾的文件。如今它還不能遞歸的在全部子目錄中獲取全部的日誌文件。
4. 若是你設置輸出到elasticsearch中,那麼你須要在filebeat的配置文件中設置elasticsearch的IP地址與端口。
output.elasticsearch:
hosts: ["192.168.1.42:9200"]
####第三步:啓動filebeat
1. bin/filebeat -e -c filebeat.yml
2. 後臺啓動 nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
####第四步:關閉filebeat
1. 查找進程 ID
ps -ef |grep filebeat
2. KILL他
kill -9 id
------###備註1. Elasticsearch 配置文件yml 格式要求特別嚴格,屬性值與屬性名之間的空格不能去掉2. 學習elasticsearch 的查詢規則3. Logstash 的過濾規則須要學習4. 主流使用方式:filebeat --->Kafaca----->logstash----->elasticsearch----kibnana