新聞中心
本文介紹在centos7下通過yum的方式安裝ELK Stack各套件,并做簡單配置。

10年積累的成都網(wǎng)站設計、成都做網(wǎng)站經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有九原免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
一.環(huán)境準備
1. 操作系統(tǒng)
CentOS-7-x86_64-Everything-1511
2. JDK版本
# 官方文檔寫得很明確:elasticsearch與logstash至少需要Java 8支持,其中l(wèi)ogstash5.x版本也不支持java 9,這里部署openjdk,使用“yum provides java”命令選取合適的版本進行安裝。 [root@elk-node1 ~]# yum install java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64 -y [root@elk-node1 ~]# java -version openjdk version "1.8.0_121" OpenJDK Runtime Environment (build 1.8.0_121-b13) OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
3. ELK版本
Elasticsearch 5.2: https://www.elastic.co/downloads/elasticsearch
Logstash 5.2:https://www.elastic.co/downloads/logstash
Kibana 5.2:https://www.elastic.co/downloads/kibana
4. 拓撲圖
1) 物理拓撲
- 驗證環(huán)境部署2臺設備,均為VMware ESXi虛擬出的vm,部署在相同網(wǎng)段;
- 每臺vm上均部署elk的3個組件,只是配置文件根據(jù)節(jié)點不同而略有不同(以下部署配置過程只針對node1,node2安裝配置可參照node1)。
2) 邏輯流程
- 數(shù)據(jù)源只需要輸入到某1個logstash節(jié)點;
- 經(jīng)過logstash處理的數(shù)據(jù)需要輸出到elasticsearch集群中的所有節(jié)點,elasticsearch分布式集群通過自身處理,每個節(jié)點均能獲取全部數(shù)據(jù);
- kibana展示只需要從本機所在elasticsearch節(jié)點即可獲取全部數(shù)據(jù)。
二.Elasticsearch部署
1. 導入elasticsearch PGP key
[root@elk-node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
2. 創(chuàng)建yum源文件
[root@elk-node1 ~]# vim /etc/yum.repos.d/elasticsearch.repo [elasticsearch-5.x] name=Elasticsearch repository for5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
3. 安裝elasticsearch
[root@elk-node1 ~]# yum install elasticsearch -y
4. 設置開機啟動
[root@elk-node1 ~]# systemctl daemon-reload [root@elk-node1 ~]# systemctl enable elasticsearch.service Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
5. 配置hosts文件
# 根據(jù)實際環(huán)境配置,將節(jié)點主機名加入hosts文件 [root@elk-node1 ~]# echo "10.11.4.151 elk-node1" >> /etc/hosts [root@elk-node1 ~]# echo "10.11.4.152 elk-node2" >> /etc/hosts
6. 配置elasticsearch.yml
[root@elk-node1 src]# cat /etc/elasticsearch/elasticsearch.yml | grep -v “#” cluster.name: elk #自定義集群名,相同集群內(nèi)的節(jié)點設置相同的集群名 node.name: elk-node1 #自定義節(jié)點名,建議統(tǒng)一采用節(jié)點hostname path.data: /var/lib/elasticsearch #data存儲路徑,可不取消注釋,默認即此路徑 path.logs: /var/log/elasticsearch #log存儲路徑,可不取消注釋,默認即此路徑 network.host: 0.0.0.0 #es監(jiān)聽地址,采用”0.0.0.0”,允許所有設備訪問 http.port: 9200 #es監(jiān)聽端口,可不取消注釋,默認即此端口 discovery.zen.ping.unicast.hosts: ["elk-node1", "elk-node2"] # 集群節(jié)點發(fā)現(xiàn)列表,也可采用ip的形式 discovery.zen.minimum_master_nodes: 2 #集群可做master的最小節(jié)點數(shù),生產(chǎn)環(huán)境建議節(jié)點數(shù)至少3個且為基數(shù) # 以下兩項設置es5.x版本的head插件可以訪問es http.cors.enabled: true #開啟跨域訪問支持,默認為false http.cors.allow-origin: "*" #跨域訪問允許的域名地址,使用正則表達式
7. 配置head插件
elasticsearch5.x版本沒有提供直接安裝head插件的方法,作者在github上給出了方法:https://github.com/mobz/elasticsearch-head
1)下載并配置nodejs
# nodejs官網(wǎng):https://nodejs.org/en/ # 如果國內(nèi)通過wget下載較慢,可通過第三方工具下載后上傳至服務器 [root@elk-node1 ~]# cd /usr/local/src/ [root@elk-node1 src]# wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz [root@elk-node1 src]# xz -d node-v6.9.5-linux-x64.tar.xz [root@elk-node1 src]# tar -xvf node-v6.9.5-linux-x64.tar -C /usr/local/ [root@elk-node1 src]# cd ~ [root@elk-node1 ~]# ln -s /usr/local/node-v6.9.5-linux-x64/bin/node /usr/bin/node [root@elk-node1 ~]# ln -s /usr/local/node-v6.9.5-linux-x64/bin/npm /usr/bin/npm # 查看nodejs是否安裝成功; # NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發(fā)工具,方便讓JavaScript開發(fā)者下載、安裝、上傳以及管理已經(jīng)安裝的包 [root@elk-node1 ~]# node -v v6.9.5 [root@elk-node1 ~]# npm -v 3.10.10
2)安裝head插件
安裝grunt
# grunt是一個方便的構(gòu)建工具,可以進行打包壓縮、測試、執(zhí)行等等的工作,5.x里的head插件就是通過grunt???動的; #如果鏡像速度不理想,可提前切到國內(nèi)的鏡像,在安裝grunt-cli前執(zhí)行:npm config set registry https://registry.npm.taobao.org # ”-g”參數(shù)代表全局安裝,一般安裝到nodejs的”lib/node_modules”目錄下;不帶參數(shù)”-g”,則是本地安裝,一般安裝到運行npm命令時所在的目錄,這里就需要安裝到head插件目錄 [root@elk-node1 ~]# npm install -g grunt-cli # 為grunt命令建軟鏈接,方便全局執(zhí)行,或加入環(huán)境變量; [root@elk-node1 ~]# ln -s /usr/local/node-v6.9.5-linux-x64/lib/node_modules/grunt-cli/bin/grunt /usr/bin/grunt
下載并配置head
# 配置elasticsearch.yml文件允許head插件跨域訪問es,請見上述章節(jié) [root@elk-node1 ~]# cd /var/lib/elasticsearch [root@elk-node1 elasticsearch]# git clone git://github.com/mobz/elasticsearch-head.git [root@elk-node1 elasticsearch]# chown -R elasticsearch:elasticsearch elasticsearch-head/
安裝head
[root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/ # 如果沒有全局安裝grunt二進制程序,可在"elasticsearch-head"目錄下執(zhí)行"npm install grunt --save"或" npm install grunt-cli" [root@elk-node1 elasticsearch]# npm install
安裝完成后可能有一些報錯,不影響使用,報錯原因未知,本人對nodejs不了解,github上有相近的問題,但并未解決。解決方法如下:
- 查看報錯信息"Error: Cannot find module '/var/lib/elasticsearch/elasticsearch-head/node_modules/phantomjs-prebuilt/install.js'",未找到" phantomjs-prebuilt/install.js"文件;
- 采取比較土的辦法,將完整的"phantomjs-prebuilt/"目錄上傳到相應位置,重新執(zhí)行"npm install",無報錯。
- 或者:npm install [email protected] --ignore-scripts
即修改"./ elasticsearch-head"目錄下"package.json"文件第17行的""Apache2" "為"Apache-2.0",涉及到開源軟件與其他合作類軟件的使用聲明。
配置head文件
-
app.js
[root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/ [root@elk-node1 elasticsearch-head]# cd _site/ [root@elk-node1 _site]# cp app.js app.js.bak # 在4328行將原"http://localhost:9200"修改為http://10.11.4.151:9200,否則head插件不能獲取節(jié)點狀態(tài)信息 [root@elk-node1 _site]# vim app.js
-
Gruntfile.js
[root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/ [root@elk-node1 elasticsearch-head]# cp Gruntfile.js Gruntfile.js.bak # 在93行新增”hostname: 0.0.0.0', “,確保能被訪問 [root@elk-node1 elasticsearch-head]# vim Gruntfile.js
8. iptables設置
# 打開tcp 9000~9600多個端口,9100訪問head插件,9200是節(jié)點事務通信端口,9300是集群節(jié)點之間選舉/狀態(tài)同步端口,9600~9700是默認的logstash數(shù)據(jù)輸入端口; # 允許多播協(xié)議,es是一個基于p2p的系統(tǒng),其先通過廣播尋找存在的節(jié)點,再通過多播協(xié)議來進行節(jié)點之間的通信,同時也支持點對點的交互; # tcp5601端口是kibana的默認訪問端口。 [root@elk-node1 ~]# vim /etc/sysconfig/iptables -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 9000:9600 -j ACCEPT -A INPUT -m pkttype --pkt-type multicast -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 5601 -j ACCEPT [root@elk-node1 ~]# systemctl restart iptables
9. 啟動并驗證
[root@elk-node1 ~]# systemctl start elasticsearch.service #啟動head插件,需要到head目錄下 [root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/ [root@elk-node1 elasticsearch-head]# grunt server &
1)啟動過程驗證
[root@elk-node1 ~]# journalctl --unit elasticsearch
2)端口驗證
[root@elk-node1 ~]# netstat –tunlp
3)集群/節(jié)點狀態(tài)信息
節(jié)點狀態(tài)信息
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/?pretty'
節(jié)點數(shù)信息
# 其中帶"*"的節(jié)點表示被選舉為master [root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/nodes?v'
節(jié)點分片信息
# 這里已經(jīng)有分片信息,因kibana已安裝并啟動,默認無信息 [root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/indices?v'
集群健康狀態(tài)信息
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cluster/health?pretty'
4)日志
# 日志文件默認在" /var/log/elasticsearch/elasticsearch.log",可在elasticsearch.yml文件中更改; # 這里查看elk-node2節(jié)點的日志,elk-node2被選舉成為master,且集群狀態(tài)正常 [root@elk-node2 ~]# tail -f /var/log/elasticsearch/elk.log
5)瀏覽器訪問
節(jié)點狀態(tài)信息(類curl)
可視化展示(head插件)
同樣有節(jié)點信息,master選舉結(jié)果信息,節(jié)點分片信息,集群健康狀態(tài)信息等。
三.Logstash部署
yum源同elasticsearch,這里不再創(chuàng)建yum文件,直接安裝即可;如果一定要創(chuàng)建則另取1個名字,如logstash.repo。
1. 安裝logstash
[root@elk-node1 ~]# yum install logstash –y
2. 設置開機啟動
[root@elk-node1 elasticsearch]# systemctl enable logstash.service Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
3. 配置logstash
1)配置文件
# 默認配置文件:/etc/logstash/logstash.yml # 其中默認配置已經(jīng)明確數(shù)據(jù),日志,logstash pipeline實例文件的存儲位置,保持默認即可; # “http.host”參數(shù)指定數(shù)據(jù)輸入主機,默認為localhost;“http.port”參數(shù)指定數(shù)據(jù)輸入端口,默認為9600~9700(每實例占用1個),此驗證暫時不做變更 [root@elk-node1 ~]# cd /etc/logstash/
[root@elk-node1 logstash]# cat logstash.yml | grep -v "#"
path.data: /var/lib/logstash path.config: /etc/logstash/conf.d path.logs: /var/log/logstash
2)pipeline文件
# 根據(jù)默認配置,pipeline實例文件默認應放置于/etc/logstash/conf.d目錄,此時目錄下無實例文件,可根據(jù)實際情況新建實例,以處理本機messages信息為例,如下:
[root@elk-node1 ~]# cd /etc/logstash/conf.d/
[root@elk-node1 conf.d]# vim messages.conf
# pipeline實例文件以”input”,”output”,”filter”等區(qū)域組??,前兩者為必選項;
# ”input”與”output”利用插件進行數(shù)據(jù)輸入與輸出,如這里”file”即輸入插件,“elasticseach”與“stdout”即輸出插件;
# 在各插件內(nèi)再具體定義行為,如”input”定義了數(shù)據(jù)源,“elasticseach”定義了輸出節(jié)點與數(shù)據(jù)輸出的索引與格式;
# “codec => rubydebug”會產(chǎn)生大量的debug文件至message(也可重定向到其他位置),此處注釋掉;
input {
file {
path => "/var/log/messages"
}
}
output {
elasticsearch {
hosts => ["10.11.4.151:9200","10.11.4.152:9200"]
index => "messages-%{+YYYY.MM.dd}"
}
stdout {
# codec => rubydebug
}
}
# 請注意權(quán)限,這里message常規(guī)權(quán)限是400,logstash無法讀取,如果無法調(diào)用,在logstash的啟動日志中會有相應的記錄
[root@elk-node1 conf.d]# cd ..
[root@elk-node1 logstash]# chown -R logstash:logstash conf.d/
[root@elk-node1 ~]# chmod 644 /var/log/messages
4. 啟動并驗證
1)啟動測試
# logstash可以啟動,但此種驗證方式會有告警
[root@elk-node1 ~]# cd /usr/share/logstash/
[root@elk-node1 logstash]# bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 按提示方式處理,在"$LS_HOME"下建立"config"目錄,并將"/etc/logstash/"下的文件建軟鏈接到"config"目錄,再次執(zhí)行即可,如下: [root@elk-node1 ~]# mkdir -p /usr/share/logstash/config/ [root@elk-node1 ~]# ln -s /etc/logstash/* /usr/share/logstash/config [root@elk-node1 ~]# chown -R logstash:logstash /usr/share/logstash/config/
2)pipeline實例啟動測試
[root@elk-node1 ~]# cd /usr/share/logstash/ [root@elk-node1 logstash]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/messages.conf -t
3)啟動并驗證
[root@elk-node1 ~]# systemctl start logstash
netstat
[root@elk-node1 ~]# netstat -tunlp
日志
[root@elk-node1 ~]# tailf /var/log/logstash/logstash-plain.log
head
瀏覽器訪問:http://10.11.4.151:9100
四.Kibana部署
yum源同elasticsearch,這里不再創(chuàng)建yum文件,直接安裝即可;如果一定要創(chuàng)建則另取1個名字,如kibana.repo。
1. 安裝kibana
[root@elk-node1 ~]# yum install kibana -y
2. 設置開機啟動
[root@elk-node1 ~]# systemctl daemon-reload [root@elk-node1 ~]# systemctl enable kibana.service Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
3. 配置kibana
# 默認配置文件:/etc/kibana/kibana.yml [root@elk-node1 ~]# cd /etc/kibana/ [root@elk-node1 kibana]# vim /etc/kibana/kibana.yml [root@elk-node1 kibana]# cat /etc/kibana/kibana.yml | grep -v "^$" | grep -v "#" server.port: 5601 #默認即5601 server.host: "0.0.0.0" #允許被訪問 elasticsearch.url: "http://10.11.4.151:9200" #es地址與端口
4. 啟動并驗證
[root@elk-node1 ~]# systemctl restart kibana [root@elk-node1 ~]# netstat -tunlp | grep 5601
五.Kibana展示
1)瀏覽器訪問:http://10.11.4.151:5601或者http://10.11.4.152:5601
2)需要在"Index name or pattern"處創(chuàng)建索引名,elassticsearch中并沒有以"logstash-*"命名的索引,則不能創(chuàng)建,新建索引對應logstash的pipeline輸出插件定義的"index",即"messages-*",如下:
3)在"Index name or pattern"處填寫入正確的索引名字,"@timestamp"會自動填充,點擊"create"創(chuàng)建,見到如下界面即索引創(chuàng)建完成;
4)在"Discover"頁面,可以搜索與瀏覽Elasticsearch中的數(shù)據(jù),默認搜索的是最近15分鐘的數(shù)據(jù),可以自定義選擇時間。
- Elasticsearchyum文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html
- Logstashyum文檔:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html
- Kibanayum文檔:https://www.elastic.co/guide/en/kibana/current/rpm.html
- es5.x版本head插件安裝:http://www.linuxidc.com/Linux/2017-09/146993.htm
本文標題:CentOS7部署ELK5.2
轉(zhuǎn)載源于:http://fisionsoft.com.cn/article/ccsicdi.html


咨詢
建站咨詢
