1. 程式人生 > >Linux搭建ELK日誌收集系統:FIlebeat+Redis+Logstash+Elasticse

Linux搭建ELK日誌收集系統:FIlebeat+Redis+Logstash+Elasticse

uri 對數 exp 取數 網速 docker useradd 通過 演示

Centos7部署ELK日誌收集系統

一、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

  1. 客戶端部署filebeat:

    yum -y install filebeat
    #查看配置文件所在位置
    rpm -qc filebeat
  2. 修改配置文件使filebeat獲取的日誌進入redis:
    註:此處演示獲取spring cloud框架中eureka日誌,其他程序日誌都可相同方法獲取
vim /etc/filebeat/filebeat.yml
#修改的內容有一家幾個字段
enabled:true
paths:程序日誌路徑
output.redis:日誌輸出地方
                    hosts:redis所在服務器IP
                    port:redis端口
                    key:redis中的key

技術分享圖片


  1. 源碼安裝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建議開啟持久化機制,保證數據不丟失

  1. 登錄測試redis是否可以正常寫入數據:
    技術分享圖片

  2. 啟動filebeat看看redis是否能接收到數據:

啟動filebeat:

systemctl start filebeat
  1. 進入redis查看是否有數據:

    #執行命令:
    keys *                          #查看所有key,此操作為慢查詢,若redis跑了大量線上業務請不要進行此操做
    lrange eureka-log 0 -1 #查詢key所有數據,若filebeat啟動時間過長請勿進行此操作

    技術分享圖片

  2. 安裝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

技術分享圖片

  1. 安裝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啟動的時候回占用特別大的資源所以需要修改下系統參數,若不修改資源啟動會異常退出

  1. 修改系統參數:
vim /etc/sysctl.conf
#添加參數
vm.max_map_count=655360

重新載入配置:

sysctl –p
  1. 修改資源參數:
vim /etc/security/limits.conf
#修改

*   soft    nofile  65536
*   hard        nofile  131072  
*   soft        nproc   65536
*   hard        nproc   131072 

如:
技術分享圖片

  1. 設置用戶資源參數:
vim /etc/security/limits.d/20-nproc.conf
#添加
elk     soft    nproc       65536
  1. 創建用戶並賦權:

    useradd elk
    groupadd elk
    useradd elk -g elk
  2. 創建數據和日誌目錄並修改目錄權限:
mkdir –pv /opt/elk/{data,logs}
chown –R elk:elk /opt/elk
chown –R elk:elk /usr/local/elasticsearch
  1. 切換用戶並後臺啟動ES:(elk用戶修改了資源參數,如不切位elk用戶啟動會暴斃)
su elk
nohup /opt/app/elasticsearch-5.6.3/bin/elasticsearch >> /dev/null 2>&1 &
  1. 查看ES狀況:
    方法一、
    curl ‘http://[ES IP]:9200/_search?pretty‘

方法二、
#網頁訪問:
http://[ES IP]:9200/_search?pretty

  1. 安裝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是完全沒有問題了,可以進行日誌收集了

  1. 創建配置文件獲取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取完)
技術分享圖片

  1. 使用curl 查看ES是否接受到數據
curl http://192.168.3.205:9200/_search?pretty

結果如下:
技術分享圖片

此時說明我們logstash從redis中取數據,在把數據推到ES中是ok的!

  1. 安裝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
  1. Elasticsearch-head安裝成功Web訪問結果如下:
    技術分享圖片

查看剛剛從logstash推到ES中的數據:
技術分享圖片

  1. 安裝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