Linux搭建ELK日誌收集系統:FIlebeat+Redis+Logstash+Elasticse
一、ELK概述:
ELK是一組開源軟件的簡稱,其包括Elasticsearch、Logstash 和 Kibana。ELK最近幾年發展迅速,已經成為目前最流行的集中式日誌解決方案。
-
Elasticsearch: 能對大容量的數據進行接近實時的存儲,搜索和分析操作。 本項目中主要通過Elasticsearch存儲所有獲取的日誌。
-
Logstash: 數據收集引擎,它支持動態的的從各種數據源獲取數據,並對數據進行過濾,分析,豐富,統一格式等操作,然後存儲到用戶指定的位置。
-
Kibana: 數據分析與可視化平臺,對Elasticsearch存儲的數據進行可視化分析,通過表格的形式展現出來。
-
Filebeat: 輕量級的開源日誌文件數據搜集器。通常在需要采集數據的客戶端安裝Filebeat,並指定目錄與日誌格式,Filebeat就能快速收集數據,並發送給logstash進行解析,或是直接發給Elasticsearch存儲。
- Redis:NoSQL數據庫(key-value),也數據輕型消息隊列,不僅可以對高並發日誌進行削峰還可以對整個架構進行解耦
傳統ELK的經典框架
單一的架構,logstash作為日誌搜集器,從數據源采集數據,並對數據進行過濾,格式化處理,然後交由Elasticsearch存儲,kibana對日誌進行可視化處理。
新型ELK框架
Filebeats是一種輕量級的日誌搜集器,其不占用系統資源,自出現之後,迅速更新了原有的elk架構。Filebeats將收集到的數據發送給Logstash解析過濾,在Filebeats與Logstash傳輸數據的過程中,為了安全性,可以通過ssl認證來加強安全性。之後將其發送到Elasticsearch存儲,並由kibana可視化分析。
二、新型ELK搭建詳細過程
實驗環境:
主機 | IP | 部署程序 |
---|---|---|
1 | 192.168.3.206 | filebeat |
2 | 192.168.3.205 | redis,logstash,elasticsearch,kibana |
下面是搭建過程中所需程序安裝包:
https://pan.baidu.com/s/1w02WtUAqh9yX4TChyMLa5Q 密碼:g0p9
-
客戶端部署filebeat:
yum -y install filebeat
#查看配置文件所在位置 rpm -qc filebeat
- 修改配置文件使filebeat獲取的日誌進入redis:
註:此處演示獲取spring cloud框架中eureka日誌,其他程序日誌都可相同方法獲取
vim /etc/filebeat/filebeat.yml
#修改的內容有一家幾個字段
enabled:true
paths:程序日誌路徑
output.redis:日誌輸出地方
hosts:redis所在服務器IP
port:redis端口
key:redis中的key
- 源碼安裝redis:
解壓redis程序包:
tar zxf redis-3.2.9.tar.gz –C /usr/local/src
編譯redis:
cd /usr/local/src/redis-3.2.9
make && make install
ln –s /usr/local/src/redis-3.2.9 /usr/local/redis
註:redis安裝時有的缺少語言環境會出錯,有的會出現奇奇怪怪的問題,只要復制Error到往上搜索下就能輕易解決,在此不多做解釋
修改redis配置文件:
vim /usr/local/redis/redis.conf
#修改內容如下:
daemonize yes #開啟後臺運行
timeout 120 #超時時間
bind 0.0.0.0 #任何地址IP都可以登錄redis
protected-mode no #關閉redis保護機制否則在沒有密碼校驗情況下redis遠程登錄失敗
註:此處是做演示,如果是線上部署elk建議開啟持久化機制,保證數據不丟失
-
登錄測試redis是否可以正常寫入數據:
- 啟動filebeat看看redis是否能接收到數據:
啟動filebeat:
systemctl start filebeat
-
進入redis查看是否有數據:
#執行命令: keys * #查看所有key,此操作為慢查詢,若redis跑了大量線上業務請不要進行此操做 lrange eureka-log 0 -1 #查詢key所有數據,若filebeat啟動時間過長請勿進行此操作
- 安裝jdk1.8:
解壓jdk安裝包並創建軟連接:
tar zxf /usr/local/src/jdk-8u131-linux-x64.tar.gz –C /usr/local/
ln -s /usr/local/jdk1.8.0_91/ /usr/local/jdk
配置環境變量:
vim /etc/profile
#修改內容如下:
JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
重新載入環境變量:
source /etc/profile
查看jdk是否安裝成功:
java -version
- 安裝Elasticsearch:
解壓安裝包並改名:
unzip elasticsearch-5.6.3.zip -d /usr/local/
mv /usr/local/ elasticsearch-5.6.3 /usr/local/elasticsearh
修改ES配置文件:
vim /usr/local/elasticsearch/config/elasticsearch.yml
#這裏指定的是集群名稱,需要修改為對應的,開啟了自發現功能後,ES會按照此集群名稱進行集群發現
cluster.name: my-application
node.name: node-1
#目錄需要手動創建
path.data: /opt/elk/data
path.logs: /opt/elk/logs
#ES監聽地址任意IP都可訪問
network.host: 0.0.0.0
http.port: 9200
#若是集群,可在裏面引號中添加,逗號隔開
discovery.zen.ping.unicast.hosts: [“192.168.3.205”]
# enable cors,保證_site類的插件可以訪問es
http.cors.enabled: true #手動添加
http.cors.allow-origin: “*” #手動添加
# Centos6不支持SecComp,而ES5.2.0默認bootstrap.system_call_filter為true進行檢測,所以導致檢測失敗,失敗後直接導致ES不能啟動
bootstrap.memory_lock: false #手動添加
bootstrap.system_call_filter: false #手動添加
註:ES啟動的時候回占用特別大的資源所以需要修改下系統參數,若不修改資源啟動會異常退出
- 修改系統參數:
vim /etc/sysctl.conf
#添加參數
vm.max_map_count=655360
重新載入配置:
sysctl –p
- 修改資源參數:
vim /etc/security/limits.conf
#修改
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
如:
- 設置用戶資源參數:
vim /etc/security/limits.d/20-nproc.conf
#添加
elk soft nproc 65536
-
創建用戶並賦權:
useradd elk groupadd elk useradd elk -g elk
- 創建數據和日誌目錄並修改目錄權限:
mkdir –pv /opt/elk/{data,logs}
chown –R elk:elk /opt/elk
chown –R elk:elk /usr/local/elasticsearch
- 切換用戶並後臺啟動ES:(elk用戶修改了資源參數,如不切位elk用戶啟動會暴斃)
su elk
nohup /opt/app/elasticsearch-5.6.3/bin/elasticsearch >> /dev/null 2>&1 &
- 查看ES狀況:
方法一、
curl ‘http://[ES IP]:9200/_search?pretty‘
方法二、
#網頁訪問:
http://[ES IP]:9200/_search?pretty
- 安裝logstash:
解壓並創建軟連接:
tar /usr/local/src/logstash-5.3.1.tar.gz –C /usr/local/
ln –s /usr/local/logstash-5.3.1 /usr/local/logstash
測試logstash是否可用:
/usr/local/logstash/bin/logstash -e ‘input { stdin { } } output { stdout {} }‘
在此創建主配文件進行測試:
vim /usr/local/logstash/config/logstash-simple.conf
#內容如下:
input { stdin { } }
output {
stdout { codec=> rubydebug }
}
使用logstash參數-f讀取配置文件進行測試:
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-simple.conf
此時說明我們的logstash是完全沒有問題了,可以進行日誌收集了
- 創建配置文件獲取redis日誌的數據:
配置文件如下:
vim /usr/local/logstash/config/redis-spring.conf
input {
redis {
port => "6379"
host => "192.168.3.205"
data_type => "list"
type => "log"
key => "eureka-log"
}
}
output {
elasticsearch {
hosts => "192.168.3.205:9200"
index => "logstash1-%{+YYYY.MM.dd}"
}
}
通過配置文件啟動服務查看效果:
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/redis-spring.conf
結果如下:
此時我們再去查看reids中key:(此時已經沒有數據了,數據已經被logstash取完)
- 使用curl 查看ES是否接受到數據
curl http://192.168.3.205:9200/_search?pretty
結果如下:
此時說明我們logstash從redis中取數據,在把數據推到ES中是ok的!
- 安裝ES插件:(elasticsearch-head)
註:head安裝需要從國外網站拉去東西,可能網速過慢導致安裝失敗(可以多試幾次),下面有幾種方法安裝:
方法一、
導入node-v8.2.1.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2 安裝包
安裝node:
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure && make && make install
安裝phantomjs:
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin/
導入es-head程序包並解壓:
unzip master.zip –d /usr/local/
cd elasticsearch-head/
npm install
npm run start &
查看端口狀態:(端口默認9100)
netstat –anpt | grep 9100
方法二、
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
netstat –anpt | grep 9100
方法三、
拉鏡像:
docker push mobz/elasticsearch-head:5
啟動鏡像:
docker run -p 9100:9100 mobz/elasticsearch-head:5
web訪問測試:
http://IP:9100
- Elasticsearch-head安裝成功Web訪問結果如下:
查看剛剛從logstash推到ES中的數據:
- 安裝kibana
解壓並安裝kibana:
tar -zxvf /usr/local/src/kibana-5.3.1-linux-x86_64.tar.gz -C /usr/local/
修改kibana配置文件:
vim /usr/local/kibana-5.3.1-linux-x86_64/config/kibana.yml
修改內容如下:
server.port: 5601 #開啟默認端口5601
server.host: “192.168.3.205” #kibana站點IP
elasticsearch.url: http://192.168.3.205:9200 #只想ES服務所在IP Port
kibana.index: “.kibana”
後臺啟動kibana:
nohup /usr/local/kibana-5.3.1-linux-x86_64/bin/kibana >> /dev/null 2>&1 &
查看端口監聽:
netstat –anot | grep 5601
結果如:(此結果表示kibana啟動成功)
使用Web訪問kibana:
http://[Kibana IP]:5601
初次訪問結果如:(剛訪問的時候沒有創建索引所以沒有看不到數據)
根據logstash配置文件中index設置索引:
首先查看logstash中的index:
Kibana中創建index:
下面按照1,2,3,4順序進行設置:
此時我們在返回Discover在裏面我們就可以看到數據了:
至此我們的ELK就安裝OK了!!!!!!!!!!!
Linux搭建ELK日誌收集系統:FIlebeat+Redis+Logstash+Elasticse