CentOS7部署ELK5.2

来源:http://www.cnblogs.com/netonline/archive/2017/09/19/7554872.html
-Advertisement-
Play Games

原文發表於cu:2017-02-10 參考文檔: Elasticsearchyum文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html Logstashyum文檔:https://www.elastic ...


原文發表於cu2017-02-10

參考文檔:

  1. Elasticsearchyum文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html
  2. Logstashyum文檔:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html
  3. Kibanayum文檔:https://www.elastic.co/guide/en/kibana/current/rpm.html
  4. es5.x版本head插件安裝:http://renzhiyuan.blog.51cto.com/10433137/1888862

本文通過yum的方式安裝ELK Stack各套件,並做簡單配置。 

一.環境準備

1. 操作系統

CentOS-7-x86_64-Everything-1511 

2. JDK版本

# 官方文檔寫得很明確:elasticsearch與logstash至少需要java 8支持,其中logstash5.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) 物理拓撲

  1. 驗證環境部署2台設備,均為VMware ESXi虛擬出的vm,部署在相同網段;
  2. 每台vm上均部署elk的3個組件,只是配置文件根據節點不同而略有不同(以下部署配置過程只針對node1,node2安裝配置可參照node1)

2) 邏輯流程

  1. 數據源只需要輸入到某1個logstash節點;
  2. 經過logstash處理的數據需要輸出到elasticsearch集群中的所有節點,elasticsearch分散式集群通過自身處理,每個節點均能獲取全部數據;
  3. kibana展示只需要從本機所在elasticsearch節點即可獲取全部數據。 

二.Elasticsearch部署 

1. 導入elasticsearch PGP key 

[root@elk-node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. 創建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文件

# 根據實際環境配置,將節點主機名加入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                       #自定義集群名,相同集群內的節點設置相同的集群名
node.name: elk-node1                    #自定義節點名,建議統一採用節點hostname
path.data: /var/lib/elasticsearch       #data存儲路徑,可不取消註釋,預設即此路徑
path.logs: /var/log/elasticsearch       #log存儲路徑,可不取消註釋,預設即此路徑
network.host: 0.0.0.0                   #es監聽地址,採用”0.0.0.0”,允許所有設備訪問
http.port: 9200                         #es監聽埠,可不取消註釋,預設即此埠
discovery.zen.ping.unicast.hosts: ["elk-node1", "elk-node2"]     # 集群節點發現列表,也可採用ip的形式
discovery.zen.minimum_master_nodes: 2   #集群可做master的最小節點數,生產環境建議節點數至少3個且為基數
# 以下兩項設置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官網:https://nodejs.org/en/
# 如果國內通過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一起安裝的包管理和分發工具,方便讓JavaScript開發者下載、安裝、上傳以及管理已經安裝的包
[root@elk-node1 ~]# node -v
v6.9.5
[root@elk-node1 ~]# npm -v
3.10.10

2)安裝head插件

安裝grunt

# grunt是一個方便的構建工具,可以進行打包壓縮、測試、執行等等的工作,5.x里的head插件就是通過grunt啟動的;
#如果鏡像速度不理想,可提前切到國內的鏡像,在安裝grunt-cli前執行:npm config set registry https://registry.npm.taobao.org

# ”-g”參數代表全局安裝,一般安裝到nodejs的”lib/node_modules”目錄下;不帶參數”-g”,則是本地安裝,一般安裝到運行npm命令時所在的目錄,這裡就需要安裝到head插件目錄
[root@elk-node1 ~]# npm install -g grunt-cli

# 為grunt命令建軟鏈接,方便全局執行,或加入環境變數;
[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,請見上述章節
[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"目錄下執行"npm install grunt --save"或" npm install grunt-cli"
[root@elk-node1 elasticsearch]# npm install 

安裝完成後可能有一些報錯,不影響使用,報錯原因未知,本人對nodejs不瞭解,github上有相近的問題,但並未解決。解決方法如下:

  1. 查看報錯信息"Error: Cannot find module '/var/lib/elasticsearch/elasticsearch-head/node_modules/phantomjs-prebuilt/install.js'",未找到" phantomjs-prebuilt/install.js"文件;
  2. 採取比較土的辦法,將完整的"phantomjs-prebuilt/"目錄上傳到相應位置,重新執行"npm install",無報錯。
  3. 或者:npm install [email protected] --ignore-scripts

同時有3個警告信息,忽略即可,其中"npm WARN [email protected] license should be a valid SPDX license expression"警告信息可做如下處理:http://www.itdadao.com/articles/c15a1031952p0.html

即修改"./ 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插件不能獲取節點狀態信息
[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是節點事務通信埠,9300是集群節點之間選舉/狀態同步埠,9600~9700是預設的logstash數據輸入埠;
# 允許多播協議,es是一個基於p2p的系統,其先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通信,同時也支持點對點的交互;
# 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)集群/節點狀態信息

節點狀態信息

[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/?pretty'

節點數信息 

# 其中帶"*"的節點表示被選舉為master
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/nodes?v'

節點分片信息

# 這裡已經有分片信息,因kibana已安裝並啟動,預設無信息
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/indices?v'

集群健康狀態信息

[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cluster/health?pretty'

4)日誌

# 日誌文件預設在" /var/log/elasticsearch/elasticsearch.log",可在elasticsearch.yml文件中更改;
# 這裡查看elk-node2節點的日誌,elk-node2被選舉成為master,且集群狀態正常
[root@elk-node2 ~]# tail -f /var/log/elasticsearch/elk.log

5)瀏覽器訪問

節點狀態信息(類curl)

可視化展示(head插件)

同樣有節點信息,master選舉結果信息,節點分片信息,集群健康狀態信息等。

三.Logstash部署

yum源同elasticsearch,這裡不再創建yum文件,直接安裝即可;如果一定要創建則另取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
# 其中預設配置已經明確數據,日誌,logstash pipeline實例文件的存儲位置,保持預設即可;
# “http.host”參數指定數據輸入主機,預設為localhost;“http.port”參數指定數據輸入埠,預設為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文件

# 根據預設配置,pipeline實例文件預設應放置於/etc/logstash/conf.d目錄,此時目錄下無實例文件,可根據實際情況新建實例,以處理本機messages信息為例,如下:
[root@elk-node1 ~]# cd /etc/logstash/conf.d/
[root@elk-node1 conf.d]# vim messages.conf 

# pipeline實例文件以”input”,”output”,”filter”等區域組成,前兩者為必選項;
# ”input”與”output”利用插件進行數據輸入與輸出,如這裡”file”即輸入插件,“elasticseach”與“stdout”即輸出插件;
# 在各插件內再具體定義行為,如”input”定義了數據源,“elasticseach”定義了輸出節點與數據輸出的索引與格式;
# “codec => rubydebug”會產生大量的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
    }
}

# 請註意許可權,這裡message常規許可權是400,logstash無法讀取,如果無法調用,在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"目錄,再次執行即可,如下:
[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,這裡不再創建yum文件,直接安裝即可;如果一定要創建則另取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"處創建索引名,elassticsearch中並沒有以"logstash-*"命名的索引,則不能創建,新建索引對應logstash的pipeline輸出插件定義的"index",即"messages-*",如下:

3)在"Index name or pattern"處填寫入正確的索引名字,"@timestamp"會自動填充,點擊"create"創建,見到如下界面即索引創建完成;

4)在"Discover"頁面,可以搜索與瀏覽Elasticsearch中的數據,預設搜索的是最近15分鐘的數據,可以自定義選擇時間。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一對一:比如一個學生對應一個身份證號、學生檔案; 一對多:一個班可以有很多學生,但是一個學生只能在一個班; 多對多:一個班可以有很多學生,學生也可以有很多課程; 一對多關係處理: 我們以學生和班級之間的關係來說明一對多的關係處理方法。假設現有基本表班級表(班級號,備註信息,……)。學生表(學號,姓名 ...
  • 第一次寫博客,看了很久博客但是寫還是第一次,總是提筆不知怎樣去寫,導致現在才開始提筆,寫下曾經的學習過程及心得筆記,如果哪裡有誤 望各位大神不吝指出! 基本的select語句 -語法:select *|{[DISTINCT] column|expression [alias],...} from t ...
  • 通過hadoop安裝包自帶的資源,進行hadoop集群搭建的驗證,並簡單介紹一下hdfs的一些操作 ...
  • 公司服務用的mysql,最近在查詢時時間很慢,經常會上10多秒,查看了一下查詢的執行計劃,發現索引沒有生效。 存儲引擎使用InnoDB。 一開始在主庫查詢,一直很好奇為什麼索引不生效,切換到備庫之後,發現備庫是有效的。 開始考慮是不是因為索引出問題,後對索引重建,發現效率高了不少。 簡單記錄一下對比 ...
  • 又重新安裝Hive,記錄一下吧: hadoop早已經裝上了。 cdh5的hive下載地址: http://archive.cloudera.com/cdh5/cdh/5/ 下載文件:hive-1.1.0-cdh5.10.0.tar.gz 操作系統版本:CentOS CentOS Linux rele ...
  • 之前在使用SQLyog的時候也沒有發現這樣問題,就是在使用NavicatPremium的時候這個問題讓我不能忍受,就是每次執行一條sql語句之後,即使是成功之後,下麵仍然有一條報錯信息,雖然是對總的結果來說沒有什麼影響,但是對於有些強迫症的一些人來說,這樣的報錯還是不能容忍的,我就再網上搜瞭解決方案 ...
  • 本篇文章是介紹的hadoop2.6.0的源碼編譯過程,經過實踐驗證是可以編譯成功的。 ...
  • 五筆碼 五筆碼 select comm.fun_spellcode_wb('資料庫') from dual 結果:ORY 函數 函數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...