目錄
1.EFK 日志收集系統介紹
2.EFK 架構部署之安裝 Elasticsearch
3.EFK 架構部署之安裝Kinaba
4.EFK 架構部署之安裝Logstash
5.EFK 架構部署之安裝Kafka
6.EFK 架構部署之安裝Filebeat
1. EFK 日志收集系統介紹
在日常維護中,每次線上服務器的Nginx或PHP遇到報錯,一般首選方法是開啟日志,查看日志內容。我們可能還需要登入到服務器中,利用命令tail -f
查看最新的日志報錯,或許還需要借助Linux運維三劍客awk
、grep
、sed
對日志內容過濾、分析等。如果有一套系統能將所有日志收集在一起,並通過Web界面展示日志內容,或者可以對日志內容進行匯總分析,以數據表格的形式直觀的展示出來,可以為我們節省大量的時間。
由此,社區開發了一套完整的開源的日志采集架構 (ELK Stack)[https://www.elastic.co/products] ,其中 E
代表 Elasticsearch
,L
代表 Logstash
,K
代表 Kibana
。
-
Elastaticsearch:是一個分布式、可擴展、實時的搜索與數據分析引擎
-
Logstash:數據收集引擎。它支持動態的從各種數據源搜集數據,並對數據進行過濾、分析、豐富、統一格式等操作,然后存儲到用戶指定的位置
-
Kibana: 數據分析和可視化平台。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示
社區常用的ELK架構的日志采集方案,在ELK+Filebeat 集中式日志解決方案詳解 這篇文章中寫得比較詳細了,這里我就不在多余贅述。
為了搭建一個高可用的 ELK 集中式日志解決方案,我們可以對ELK做進一步的改進,可參考從ELK到EFK演進
我們搭建的日志采集系統架構如下圖所示:
在ELK的基礎之上,我們采用了Filebeat做日志采集端,如果像ELK中的架構,Logstash作為日志采集端,那么每台服務器都需要安裝JAVA環境,因為Logstash是基於Java環境,才能正常使用。而我們采用的 Filebeat 不需要任何依賴,直接安裝后,修改配置文件,啟動服務即可。當采集到日志文件時,在 input
中我們需要在Filebeat中定義一個 fields
,定義一個log_topic
的字段,將指定路徑下的日志文件分為一類。在 Output
中,我們指定 Output
輸入至Kafka,並根據 input
Kafka作為一個消息隊列,接收來自Filebeat客戶端采集上來的所有日志,並根據不同類型的日志(例如nginx、php、system)分類轉發。在Kafka中,我們根據 inout
中自定義的日志類型,在kafka中創建不同的topic。
Logstash接收來自Kafka消息隊列的消息,根據Kafka中不同的topic,將日志分類寫入Elasticsearch中;Kibana匹配Elasticsearch中的索引,可以對日志內容分析、檢索、出圖展示(當然需要自己設計出圖了)。
2.EFK 架構部署之安裝 Elasticsearch
0x01 環境說明
系統:CentOS 7
軟件版本如下圖:
軟件 | 版本號 |
---|---|
Kibana | 6.6 |
Elasticsearch | 6.6 |
Logstash | 6.6 |
Filebeat | 6.6 |
metricbet | 6.6 |
Kafka | kafka_2.11-2.1.0 |
Kafka-manage | 1.3.3.22 |
Kafka-eagle | kafka-eagle-web-1.3.0 |
0x02 系統初始化配置
可參考文章:Shell 之CentOS 7 系統初始化
新增配置如下系統參數 (/etc/security/limits.conf
):
# 解除文件描述符限制
* soft nofile 65535
* hard nofile 65535
# 操作系統級別對每個用戶創建的進程數的限制
* soft nproc 2048
* hard nproc 2048
# 解除對用戶內存大小的限制
* soft memlock unlimited
* hard memlock unlimited
重啟服務器
0x03 安裝 JDK 8
由於Elasticsearch、Logstash、Kafka-eagle、均需要JDK環境,所以需提前安裝 java 環境。
可參考官網:JDK 8 Installation Instructions
安裝包下載地址:Java SE Development Kit 8 Downloads
先選擇 Accept License Agreement
,再下載對應的安裝包, 我這里使用的是 CentOS 7 的系統,所以選擇 rpm
的鏡像包,若是 Ubuntu
系統的可以選擇 .tar.gz
的鏡像包
安裝步驟可參考:CentOS 7 之安裝部署 JDK
rpm 包安裝的JDK默認軟件安裝目錄為:/usr/java/jdk1.8.0_201-amd64
,需要配置環境變量,后期的很多軟件部署均需要這個路徑,最后需檢查一下 /usr/bin
目錄下是否有java
的執行文件
[root@efk-master ~]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 Mar 4 11:00 /usr/bin/java -> /etc/alternatives/java
最后查看 java
的版本信息:
[root@efk-master ~]# 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)
到此為止,JDK環境已經部署完畢
0x04 安裝 Elasticsearch
由於 Elasticsearch 是構建於 Java 的基礎之上的,所以對 java 的版本有一定的要求,需提前配置好 Java 環境。 Elasticsearch 6.6 版本建議安裝java的版本為 Java 8發行版中的 1.8.0_131 之后版本均可。官網更推薦使用提供技術支持(LTS)的 Java 版本。安裝完 Java 后建議配置 JAVA_HOME
環境變量。
提示:由於我使用的是CentOS 7 64位的操作系統,后續的安裝中均會選擇 RPM 包的形式安裝,而且我是使用的 root
用戶權限部署的。
1.下載安裝公共密鑰:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
2.手動下載安裝安裝 RPM 包
# 下載 ES rpm 包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.rpm
# 下載 ES 的 sha512 哈希值,保證下載的安裝包無數據丟失
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.rpm.sha512
# 驗證 哈希值
shasum -a 512 -c elasticsearch-6.6.1.rpm.sha512
# 安裝 ES
sudo rpm --install elasticsearch-6.6.1.rpm
3.配置 ES 相關內容,將如下內容添加至主配置文件 /etc/elasticsearch/elasticsearch.yml
中
# 配置 ES 集群的名字,此次沒有搭建ES集群,僅為單機部署。但是為了便於后期搭建ES集群,所以需要配置集群名字
cluster.name: efk
# 配置 ES 節點的名字
node.name: es-1
# 是否為主節點
node.master: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
# 允許所有網段訪問 9200 端口
network.host: 0.0.0.0
# 開啟 http 的 9200 端口
http.port: 9200
# 指定集群中的節點中有幾個有 master 資格的節點
discovery.zen.minimum_master_nodes: 1
# 以下配置為 head 插件配置
http.cors.enabled: true
http.cors.allow-origin: "*"
4.配置 ES 內存
vim /etc/elasticsearch/jvm.options
#將如下內容:
-Xms1g
-Xmx1g
#更改為
-Xms32g
-Xmx32g
5.運行 ES
# /bin/systemctl daemon-reload
# /bin/systemctl enable elasticsearch.service
# systemctl start elasticsearch.service
6.檢查 ES 是否運行正常
a. 確保ES的默認9200端口開啟
b. 確保ES的服務正常啟動
# 查看端口
# lsof -i :9200
# 查看服務
# ps -ef | grep elasticsearch| grep -v grep
7.瀏覽器訪問 ES
輸入本機IP加端口號
http://ip:9200
8.安裝 elasticsearch-head
插件(需提前准備好 node.js
環境)
我們先安裝部署 node.js 環境
cd /opt/efk
curl -L -O https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz
tar -xf node-v10.15.3-linux-x64.tar.xz
mv node-v10.15.1-linux-x64 /usr/local
配置 node 的環境變量 (/etc/profile
)
# node home
export NODEJS_HOME=/usr/local/node-v10.15.1-linux-x64
export PATH=$PATH:$JAVA_HOME/bin:$NODEJS_HOME/bin
激活環境變量
source /etc/profile
配置軟鏈接
# ln -s /usr/local/node-v10.15.1-linux-x64/bin/node /usr/bin/node
驗證是否配置成功
# node --version
v10.15.1
安裝 elasticsearch-head
# cd /usr/local
# git clone git://github.com/mobz/elasticsearch-head.git
# cd elasticsearch-head
# npm install
# npm run start
訪問地址: http://ip:9100
如上圖所示:
1.在瀏覽器中輸入http://ip:9100(ip為部署環境的本機ip)
2.輸入框中輸入ES的地址:http://ip:9200 (端口號9200為ES的主配置文件中配置的 http.port)
3.由於此文檔是在整個EFK日志采集系統搭建完畢后,編寫的文檔,所以,可能會看到 system
的索引,暫時先忽略。我們重點關注es-1
;如果不記得的話,可以查看前面配置的ES主配置文件,es-1
即為我們前面配置的node.name
;這里提醒我們不要小看任何一個配置選項,既然需要配置,必有其用途。
3.EFK 架構部署之安裝 Kibana
1.下載 64位安裝包,並安裝 Kibana
# cd /opt/efk
# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz
# shasum -a 512 kibana-6.6.1-linux-x86_64.tar.gz
# tar -xzf kibana-6.6.1-linux-x86_64.tar.gz
# mv kibana-6.6.1-linux-x86_64/ /usr/local
- 配置 Kinaba
# kibana 訪問端口
server.port: 5601
# kibana 訪問 IP 地址
server.host: "192.168.7.3"
# kibana 的服務名
server.name: "efk-master"
# ES 地址
elasticsearch.hosts: ["http://192.168.7.3:9200"]
# kibana 索引
kibana.index: ".kibana"
# ES 登錄賬號及密碼
elasticsearch.username: "admin"
elasticsearch.password: "admin"
# kibana 進程 ID 路徑
pid.file: /var/run/kibana.pid
3.啟動服務
執行kibana的二進制文件,此命令執行后,進程會在前台運行,后期我們會使用 Supervisord 的方式部署。
# /usr/local/kibana-6.6.0-linux-x86_64/bin/kibana
4.訪問kibana
http:ip:5601
點擊 Management
選項,出現如下圖所示:
點擊 Elasticsearch
中的 Index Management
,
如果是剛剛搭建的kibana,ES中是沒有這些索引,現在看到的索引即時根據采集的不同日志,創建的不同的索引值。在后期會講到如何根據不同的日志創建不同的ES索引。
如上圖,如果我們的數據已寫入 ES 中后,我們需要在 Kibana 中根據ES中的索引值,創建對應的索引匹配形式。創建完Kibana中的索引匹配后,可以點擊Discory
,即可以根據不同的索引查看到相關的日志內容了。
4.EFK 架構部署之安裝 Logstash
1.下載RPM 包,並安裝
# cd /opt/efk
# curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.rpm
# rpm -iv logstash-6.6.1.rpm
安裝完成即可,如何配置在后續內容中講到。
5.EFK 架構部署之安裝 Kafka
可參考官方文檔:Quickstart
1.下載Kafka安裝包
# cd /opt/efk
# curl -L -O https://www.apache.org/dyn/closer.cgi?path=/kafka/2.1.0/kafka_2.11-2.1.0.tgz
# tar -xzf kafka_2.11-2.1.0.tgz
# mv kafka_2.11-2.1.0 /usr/local
由於kafka是用腳本啟動的,腳本路徑在: /usr/local/kafka_2.11-2.1.0/bin
,后期我們使用 Supervisord 啟動。
6.EFK 架構部署之安裝 Filebeat
1.下載安裝 Filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.1-x86_64.rpm
sudo rpm -vi filebeat-6.6.1-x86_64.rpm
需要對默認配置進行修改。
提示: RPM包安裝的Elasticsearch、Logstash、Filebeat,默認安裝路徑在 /usr/share
目錄下,對應的配置文件在 /etc
目錄下,
例如:Elasticsearch 安裝目錄在 /usr/share/elasticsearch
目錄下,配置文件在 /etc/elasticsearch
目錄下。