ELK之日志收集系統部署


目錄

1.EFK 日志收集系統介紹
2.EFK 架構部署之安裝 Elasticsearch
3.EFK 架構部署之安裝Kinaba
4.EFK 架構部署之安裝Logstash
5.EFK 架構部署之安裝Kafka
6.EFK 架構部署之安裝Filebeat


1. EFK 日志收集系統介紹

      在日常維護中,每次線上服務器的Nginx或PHP遇到報錯,一般首選方法是開啟日志,查看日志內容。我們可能還需要登入到服務器中,利用命令tail -f 查看最新的日志報錯,或許還需要借助Linux運維三劍客awkgrepsed對日志內容過濾、分析等。如果有一套系統能將所有日志收集在一起,並通過Web界面展示日志內容,或者可以對日志內容進行匯總分析,以數據表格的形式直觀的展示出來,可以為我們節省大量的時間。

      由此,社區開發了一套完整的開源的日志采集架構 (ELK Stack)[https://www.elastic.co/products] ,其中 E 代表 ElasticsearchL 代表 LogstashK 代表 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 環境

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
  1. 配置 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 目錄下。


參考文章:

ELK+Filebeat 集中式日志解決方案詳解
從ELK到EFK演進
部署和擴展 ELK


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM