ELK 部署文檔

1. 前言

在平常運維工做中,對於系統和業務日誌的處理尤其重要。尤爲是分佈式架構,每一個服務都會有不少節點,若是要手工一個一個的去取日誌,運維怕是要累死。 java

簡單介紹:node

ELK 是 elasticsearch + logstash + kibana 三款開源軟件的簡稱。linux

elasticsearch:是個開源的分佈式搜索引擎,特色是:分佈式、配置簡單、自動發現、索引自動分片、索引副本機制、restful風格接口,多數據源,自動搜索負載等nginx

logstash:能夠對日誌進行收集、濾過、並將其存儲在 elasticsearch中git

kibana:能夠爲 elasticsearch提供友好的用戶交互界面,用戶能夠經過 kibana來分析、搜索甚至繪圖來分析數據。github

 

這裏介紹下目前使用比較多的架構:npm

ELK + filebeat bootstrap

Filebeat 是一個輕量級開源日誌文件數據收集器,能夠將它安裝到須要收集的節點上,它會將日誌輸送到 logstash 或 elasticsearchvim

有了 ELK 就能夠將分佈到多臺的日誌統一規劃起來。瀏覽器

 

網絡上有不少關於 ELK 的部署方案,參考了不少發現要不就是老版本的,要不就是不太完善,所以本身作下記錄。

注意:在安裝 ELK 的時候,這三個軟件的版本必須保持支持,不然出現各類bug

 

2. ELK搭建過程

實驗拓撲圖:

 

 

 

實驗環境主機服務介紹:

 

 

 

本次實驗是收集 nginx 日誌,並存儲在 elasticsearch中。將 elasticsearch 和 kibana 安裝在同一主機上能夠避免沒必要要的網絡IO操做,直接本機交互。

 

2.1 Elasticsearch 的安裝過程

(1)初始化工做

  • selinux、firewall 關閉
  • 時間同步
  • 主機名修改
  • 修改打開文件最大數

 

 時間同步:

[root@192.168.118.14 ~]#ntpdate tiger.sina.com.cn

 

修改主機名:

[root@192.168.118.14 ~]#hostnamectl set-hostname node1
修改完主機名別忘記在 /etc/hosts 中申明
192.168.118.14  node1

 

修改文件打開最大數:

[root@192.168.118.14 ~]#vim /etc/security/limits.conf
*               soft    nproc       655350
*               hard    nproc       655350
*               soft    nofile       655350
*               hard    nofile       655350

[root@192.168.118.14 ~]#ulimit -SHn 655350

 

 (2)配置 java 環境

[root@192.168.118.14 /usr/local/src]#tar xf jdk-8u77-linux-x64.tar.gz -C /usr/local/

在 /etc/profile 文件中追加
JAVA_HOME=/usr/local/jdk1.8.0_77
JAVA_BIN=$JAVA_HOME/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

[root@192.168.118.14 /usr/local/src]#source /etc/profile
[root@192.168.118.14 /usr/local/src]#ln -vs /usr/local/jdk1.8.0_77/bin/java /usr/bin/
[root@192.168.118.14 /usr/local/src]#java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

 

 (3)安裝 elasticsearch

下載地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

這裏下載的是 6.8 的 rpm 包

 

直接安裝:

[root@192.168.118.14 ~/ELK]#yum localinstall elasticsearch-6.8.2.rpm
修改配置文件以下:
[root@192.168.118.14 ~/ELK]#egrep ^[a-z] /etc/elasticsearch/elasticsearch.yml
cluster.name: super-cluster
node.name: node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.118.14"]
http.cors.enabled: true
http.cors.allow-origin: "*"

 

 

 

啓動

[root@192.168.118.14 ~/ELK]#systemctl enable elasticsearch ; systemctl start elasticsearch

 

首次啓動可能會啓動失敗,查看日誌:

[root@192.168.118.14 ~/ELK]#tail /var/log/elasticsearch/super-cluster.log
…
[1]: memory locking requested for elasticsearch process but memory is not locked
…

 

如上報錯,須要修改啓動腳本:

[root@192.168.118.14 ~/ELK]#vim /lib/systemd/system/elasticsearch.service
在 [Service] 配置段添加:
…
LimitMEMLOCK=infinity
…

[root@192.168.118.14 ~/ELK]#systemctl daemon-reload 
[root@192.168.118.14 ~/ELK]#systemctl start elasticsearch

查看端口,若是 9200 和 9300 監聽,則說明 elasticsearch啓動成功。

驗證:

[root@192.168.118.14 ~/ELK]#curl http://localhost:9200/
{
  "name" : "node1",
  "cluster_name" : "super-cluster",
  "cluster_uuid" : "1FD-KmYMTVCzWVPI9vn8zw",
  "version" : {
    "number" : "6.8.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "b506955",
    "build_date" : "2019-07-24T15:24:41.545295Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

到此,elasticsearch安裝成功。

 

這裏多安裝一個elasticsearch-head 用來調試和查看數據是很是方便的。

程序下載地址:https://github.com/mobz/elasticsearch-head

首先安裝依賴包

yum install git nodejs openssl-devel screen -y

克隆 elasticsearch-head項目
[root@192.168.118.14 ~]# git clone  https://github.com/mobz/elasticsearch-head.git
[root@192.168.118.14 ~]# cd elasticsearch-head/

此時忽略phantomjs-prebuilt@2.1.16,執行命令以下
[root@node1 elasticsearch-head]# npm install phantomjs-prebuilt --ignore-scripts

[root@node1 elasticsearch-head]# npm install
…

這裏是一個很是緩慢的過程。

 

 

啓動 elasticsearch-head 服務

[root@192.168.118.14 ~]#cd elasticsearch-head/
[root@192.168.118.14 ~/elasticsearch-head]#screen
[root@node1 elasticsearch-head]# npm run start
Ctrl+a  Ctrl+d 將進程放置到後臺,這裏不懂的查下 screen 命令,很好使。

查看端口 只要 9100 被監聽,說明啓動成功。

 

瀏覽器訪問:

 

 

 

妥了,安裝成功。經過 elasticsearch-head 能夠查看 elasticsearch 中的全部數據。目前就一個 node1  索引。若是要深刻學習 elasticsearch 推薦一本書《elasticsearch-the-definitive-guide-cn》  網上有 PDF 能夠下載。

 

接下來,安裝 kibana 。Kibana 和 elasticsearch安裝到同一臺主機的

Kibana 下載地址:https://www.elastic.co/cn/downloads/past-releases#kibana

直接rpm包安裝

[root@192.168.118.14 ~/ELK]#yum localinstall kibana-6.8.2-x86_64.rpm -y

 修改配置文件:

 

 

這裏注意,若是將 kibana 端口修改成 80 ,這裏是須要修改kibana啓動用戶爲 root 由於普通用戶是不能啓動 1024 如下端口的。

修改啓動配置文件:

[root@192.168.118.14 ~]#vim /etc/systemd/system/kibana.service
User=root
Group=root

再次啓動服務
[root@192.168.118.14 ~]#systemctl daemon-reload
[root@192.168.118.14 ~]#systemctl restart kibana

 

查看 80 端口若是被監聽就說明啓動成功。

 

 

2.2 logstash 安裝過程

根據規劃,logstash 應該被安裝到一臺獨立的主機上,logstash安裝很是簡單。

Logstash 下載地址:https://www.elastic.co/cn/downloads/past-releases#logstash

 

和上面同樣,初始化工做不要忘記,這裏就再也不描述了。

安裝 jdk 也和上面同樣的,jdk驗證:

[root@192.168.118.15 /usr/local/src]#java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

 

安裝 logstash

[root@192.168.118.15 ~]#yum localinstall logstash-6.8.2.rpm  -y

將 logstash 命令添加到 PATH 環境變量中
[root@192.168.118.15 /etc/logstash]#vim /etc/profile.d/logstash.sh
export PATH=/usr/share/logstash/bin:$PATH

Ok, 到這裏已經安裝完成,是否是很簡單。

 

驗證:

[root@192.168.118.15 ~]#logstash -e 'input { stdin {} } output { stdout{} }'
只要出現 Successfully started Logstash API endpoint {:port=>9600} 就表示啓動成功。
你好,中國
{
      "@version" => "1",
       "message" => "你好,中國",
          "host" => "logstash-node1",
    "@timestamp" => 2019-09-14T04:14:35.035Z

 

測試經過,logstash驗證成功。

 

2.3 Filebeat 和 nginx 安裝

Filebeat 下載地址:https://www.elastic.co/cn/downloads/past-releases#filebeat

 

首先安裝 nginx 直接yum安裝

[root@192.168.118.16 ~]#yum install nginx -y
啓動nginx
[root@192.168.118.16 ~]#nginx

安裝 filebeat

[root@192.168.118.16 ~]#yum localinstall filebeat-6.8.2-x86_64.rpm -y
開啓nginx模塊
[root@192.168.118.16 ~]#cd /etc/filebeat/
[root@192.168.118.16 /etc/filebeat]#filebeat modules enable nginx
Enabled nginx

 修改 filebeat主配置文件:

[root@192.168.118.16 ~]#vim /etc/filebeat/filebeat.yml
註釋掉輸出到 elasticsearch
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

開啓輸出到 logstash
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.118.16:5044"]

注意這裏的 hosts 要寫 logstash 主機的 IP

修改 nginx 模塊配置文件:

[root@192.168.118.16 ~]#vim /etc/filebeat/modules.d/nginx.yml

 

 

 

啓動 filebeat 服務

[root@192.168.118.16 ~]#systemctl start filebeat
Filebeat 服務是沒有監聽端口的,只要狀態是 running 就表示啓動成功,能夠查看 filebeat 日誌
/var/log/filebeat/filebeat

 

到此,ELK + filebeat 已經部署完畢,接下來就能夠安裝需求來進行調整和收集數據,而這一塊的工做都集中在 logstash,所以 ELK 編寫 logstash 纔是難點。Logstash 配置語法,強力建議查看官方文檔,很是全面了。

 

 

2.4 編寫 logstash 配置文件

這裏採用按部就班的方式展開,能夠先寫一個簡單的測試。

編寫一個將數據輸出到屏幕的配置文件:

[root@192.168.118.15 /etc/logstash/conf.d]#vim test.conf

 

Logstash 能夠根據配置文件來啓動,啓動方式以下:

[root@192.168.118.15 /etc/logstash/conf.d]#logstash -f test.conf
出現 Successfully started Logstash API endpoint 就表示啓動成功。

 

啓動成功後,咱們嘗試訪問 nginx 生成日誌數據。

 

 

日誌文件已經傳輸過來了,接下來就是把這些數據寫入到 elasticsearch 中。

繼續修改配置文件:

 

經過配置文件啓動 logstash

[root@192.168.118.15 /etc/logstash/conf.d]#logstash -f test.conf

嘗試訪問 nginx 查看 elasticsearch-head中是否有新的索引被建立出來。

 

 如上圖,一個新的索引被建立出來,能夠經過 elasticsearch-head 查看該索引中的數據。

 

 

目前已經將日誌數據寫入到 elasticsearch中了, 而後經過 kibana 展現出來,瀏覽器訪問上面裝好的 kibana

 

 

 

設置完成,直接點擊 Discover

多訪問幾回nginx,查看日誌是否展現出來。

 

 

ok,到此, ELK + filebeat 獲取 nginx 日誌就完成了。雖然將日誌展現出來了, 可是這樣雜亂無章的日誌數據看着仍是很難受的,這就須要進一步的規整。

下一篇再寫若是更詳細的經過 logstash獲取nginx日誌數據,而後經過kibana展現更規整的數據及繪圖。

相關文章
相關標籤/搜索