快速搭建ELK7.5版本的日誌分析系統--搭建篇

2021-12-10 運維開發故事

一、ELK安裝部署

官網地址:https://www.elastic.co/cn/
官網權威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
安裝指南:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/rpm.html

ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但並非全部

Logstash :

是一個用來搜集、分析、過濾日誌的工具。

它支持幾乎任何類型的日誌,包括系統日誌、錯誤日誌和自定義應用程式日誌。

它可以從許多來源接收日誌,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出數據,包括電子郵件、websockets和Elasticsearch。

Elasticsearch:

是實時全文搜索和分析引擎,提供搜集、分析、存儲數據三大功能;

是一套開放REST和JAVA API等結構提供高效搜索功能,可擴展的分布式系統。

它構建於Apache Lucene搜尋引擎庫之上。

Kibana:

一個基於Web的圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch指標中的日誌數據。

它利用Elasticsearch的REST接口來檢索數據,不僅允許用戶創建他們自己的數據的定製儀錶板視圖,還允許他們以特殊的方式查詢和過濾數據。

Beats :

輕量型採集器的平臺,從邊緣機器向 Logstash 和 Elasticsearch 發送數據。


Filebeat:

輕量型日誌採集器。


https://www.elastic.co/cn/


https://www.elastic.co/subscriptions

Input:輸入,輸出數據可以是Stdin、File、TCP、Redis、Syslog等。
Filter:過濾,將日誌格式化。有豐富的過濾插件:Grok正則捕獲、Date時間處理、Json編解碼、Mutate數據修改等。
Output:輸出,輸出目標可以是Stdout、File、TCP、Redis、ES等。

基本概念

Node:運行單個ES實例的伺服器
Cluster:一個或多個節點構成集群
Index:索引是多個文檔的集合
Document:Index裡每條記錄稱為Document,若干文檔構建一個Index
Type:一個Index可以定義一種或多種類型,將Document邏輯分組
Field:ES存儲的最小單元
Shards:ES將Index分為若干份,每一份就是一個分片
Replicas:Index的一份或多份副本
ES    關係型資料庫(比如Mysql)

ES關係型資料庫(比如Mysql)IndexDatabaseTypeTableDocumentRowFieldColumn準備環境

本次使用2臺伺服器來進行模擬集群,所以請準備2臺伺服器
Centos7.6 兩臺
IP:192.168.73.133 安裝:elasticsearch、logstash、Kibana、java
   192.168.73.135 安裝:  elasticsearch、logstash

安裝JDK

yum安裝

[root@elk-master ~]# yum install -y java
[root@elk-master ~]# java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

源碼安裝JDK

下載安裝http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

配置Java環境# tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/# ln –s /usr/local/jdk1.8.0_91 /usr/local/jdk# vim /etc/profileexport JAVA_HOME=/usr/local/jdkexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/bin# source /etc/profile看到如下信息,java環境配置成功# java -versionjava version "1.8.0_91"Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

配置安裝ElasticSearch

yum安裝

安裝elasticsearch的yum源的密鑰(這個需要在所有伺服器上都配置)
[root@elk-master ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch配置elasticsearch的yum源
在elasticsearch.repo文件中添加如下內容
[root@elk-master ~]# vim /etc/yum.repos.d/elasticsearch.repo[elasticsearch-7.x]name=Elasticsearch repository for 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md
安裝elasticsearch
[root@elk-master ~]# yum install -y elasticsearch

創建elasticsearch data的存放目錄,並修改該目錄的屬主屬組

# mkdir -p /data/es-data (自定義用於存放data數據的目錄)
# chown -R elasticsearch:elasticsearch /data/es-data

修改elasticsearch的日誌屬主屬組

# chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

修改elasticsearch的配置文件

[root@elk-master ~]# vim /etc/elasticsearch/elasticsearch.yml
找到配置文件中的cluster.name,打開該配置並設置集群名稱,是否作為主節點
cluster.name: elk-cluster
node.master: true
node.data: true

找到配置文件中的node.name,打開該配置並設置節點名稱
node.name: elk-1

修改data存放的路徑
path.data: /data/es-data

修改logs日誌的路徑
path.logs: /var/log/elasticsearch/

監聽的網絡地址
network.host: 192.168.73.133

設置集群中的Master節點的初始列表,可以通過這些節點來自動發現其他新加入集群的節點
discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]

設置這個參數來保證集群中的節點可以知道其它N個有master資格的節點。默認為1,對於大的集群來說,可以設置大一點的值(2-4)
discovery.zen.minimum_master_nodes: 1

開啟監聽的埠
http.port: 9200

增加新的參數,這樣head插件可以訪問es (7.x版本,如果沒有可以自己手動加)
http.cors.enabled: true
http.cors.allow-origin: "*"

檢查配置
[root@elk-master ~]# grep -v ^# /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-cluster
node.name: elk-1
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 192.168.73.133
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"

集群主要關注兩個參數
discovery.zen.ping.unicast.hosts   # 單播,集群節點IP列表。提供了自動組織集群,自動掃描埠9300-9305連接其他節點。無需額外配置。
discovery.zen.minimum_master_nodes # 最少主節點數
為防止數據丟失,這個參數很重要,如果沒有設置,可能由於網絡原因腦裂導致分為兩個獨立的集群。為避免腦裂,應設置符合節點的法定人數:(nodes / 2 ) + 1
換句話說,如果集群節點有三個,則最小主節點設置為(3/2) + 1 或2

啟動服務並設置開機啟動

[root@elk-master ~]# systemctl start elasticsearch && systemctl enable elasticsearch

通過瀏覽器請求下9200的埠,看下是否成功

先檢查9200埠是否起來
[root@elk-master ~]# netstat -antp |grep 9200
tcp6 0 0 192.168.73.133:9200 :::* LISTEN 61375/java

瀏覽器訪問測試是否正常(以下為正常)
[root@elk-master ~]# curl http://192.168.73.133:9200/
{
"name" : "elk-1",
"cluster_name" : "elk-cluster",
"cluster_uuid" : "AtEF6eE2RXGw2_vv-WVcVw",
"version" : {
"number" : "7.5.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "e9ccaed468e2fac2275a3761849cbee64b39519f",
"build_date" : "2019-11-26T01:06:52.518245Z",
"build_snapshot" : false,
"lucene_version" : "8.3.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

注意事項

需要修改幾個參數,不然啟動會報錯

vim /etc/security/limits.conf
在末尾追加以下內容(elk為啟動用戶,當然也可以指定為*)
elk soft nofile 65536
elk hard nofile 65536
elk soft nproc 2048
elk hard nproc 2048
elk soft memlock unlimited
elk hard memlock unlimited

繼續再修改一個參數
vim /etc/security/limits.d/90-nproc.conf
將裡面的1024改為2048(ES最少要求為2048)* soft nproc 2048

另外還需注意一個問題(在日誌發現如下內容,這樣也會導致啟動失敗,這一問題困擾了很久)
[2017-06-14T19:19:01,641][INFO ][o.e.b.BootstrapChecks ] [elk-1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-06-14T19:19:01,658][ERROR][o.e.b.Bootstrap ] [elk-1] node validation exception
[1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk解決:修改配置文件,在配置文件添加一項參數(目前還沒明白此參數的作用)
vim /etc/elasticsearch/elasticsearch.yml
bootstrap.system_call_filter: false

node節點安裝

本次環境我們使用2臺伺服器,這2臺伺服器的服務搭建可以跟上面的步驟相同即可,配置文件按照以下修改

[root@k8s-node03 elasticsearch]# grep -v ^# /etc/elasticsearch/elasticsearch.ymlcluster.name: elk-clusternode.name: elk-2path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchnetwork.host: 192.168.73.135http.port: 9200discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]discovery.zen.minimum_master_nodes: 1http.cors.enabled: true
http.cors.allow-origin: "*"啟動服務並設置開機啟動
[root@k8s-node03 elasticsearch]# systemctl start elasticsearch && systemctl enable elasticsearch

使用該地址可以查看node節點是否加入節點 http://192.168.73.133:9200/_cat/nodes?v

也可以使用REST接口查看集群健康狀態:

[root@elk-master ~]# curl -i -XGET http://192.168.73.133:9200/_cluster/health?prettyHTTP/1.1 200 OKcontent-type: application/json; charset=UTF-8content-length: 465{ "cluster_name" : "elk-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 5, "active_shards" : 10, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0}

查看集群節點:

[root@elk-master ~]# curl -i -XGET http://192.168.73.133:9200/_cat/nodes?pretty
HTTP/1.1 200 OK
content-type: text/plain; charset=UTF-8
content-length: 102

192.168.73.135 19 96 1 0.07 0.15 0.14 dilm - elk-2
192.168.73.133 16 96 7 0.54 0.45 0.35 dilm * elk-1

green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
yellow:所有的主分片已經分片了,但至少還有一個副本是缺失的。不會有數據丟失,所以搜索結果依然是完整的。不過,你的高可用性在某種程度上被弱化。如果 更多的 分片消失,你就會丟數據了。把 yellow 想像成一個需要及時調查的警告。
red:至少一個主分片(以及它的全部副本)都在缺失中。這意味著你在缺少數據:搜索只能返回部分數據,而分配到這個分片上的寫入請求會返回一個異常。
green/yellow/red 狀態是一個概覽你的集群並了解眼下正在發生什麼的好辦法

安裝elasticsearch-head插件

安裝docker鏡像或者通過github下載elasticsearch-head項目都是可以的,1或者2兩種方式選擇一種安裝使用即可
Github下載地址:https://github.com/mobz/elasticsearch-head

1. 使用docker的集成好的elasticsearch-head
# docker run -p 9100:9100 mobz/elasticsearch-head:5

docker容器下載成功並啟動以後,運行瀏覽器打開http://localhost:9100/

2. 使用git安裝elasticsearch-head
# yum install -y npm
# git clone git://github.com/mobz/elasticsearch-head.git
# cd elasticsearch-head
# npm install
# npm run start &
檢查埠是否起來
netstat -antp |grep 9100
瀏覽器訪問測試是否正常
http://IP:9100/

集群健康值介紹:
黃色代表沒有主分片數據丟失,但是現在不是健康的狀態(警告)應該有10個分片,現在只有5個。
紅色代表有數據丟失
綠色代表正常
提示:es支持一個類似於快照的功能,方便我們用於數據備份

Head插件小缺點:當我們索引特別多的時候,打開head至少需要五分鐘。因為它要把所有的索引都掃描一遍進行展示,這時候打開使用的帶寬也會特別大(不會出現超時,一直等待就可以)

LogStash的安裝使用

安裝Logstash環境:
官方安裝手冊:

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

下載yum源的密鑰認證:

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

利用yum安裝logstash

[root@elk-master ~]# yum install -y logstash

創建一個軟連接,每次執行命令的時候不用在寫安裝路勁(默認安裝在/usr/share下)

[root@elk-master ~]# ln -s /usr/share/logstash/bin/logstash /bin/

執行logstash的命令

[root@elk-master ~]# logstash -e 'input { stdin { } } output { stdout {} }'
hello world
test

然後等待stdout返回的結果

注:
  -e          執行操作
  input       標準輸入
  { input }   插件
  output      標準輸出
  { stdout }  插件

如果標準輸出到elasticsearch中保存下來,應該怎麼玩,看下面

[root@elk-master ~]# logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.73.133:9200"] } stdout { codec => rubydebug }}'
I am ELK
who are you

logstash使用配置文件

官方指南:

https://www.elastic.co/guide/en/logstash/current/configuration.html

創建配置文件elk.conf

input { stdin { } }
output {
elasticsearch { hosts => ["192.168.73.133:9200"] }
stdout { codec => rubydebug }
}

使用配置文件運行logstash

logstash -f /etc/logstash/conf.d/elk.conf/elk.conf

運行成功以後輸入以及標準輸出結果

logstash的插件類型

Input插件
權威指南:https://www.elastic.co/guide/en/logstash/current/input-plugins.html

file插件的使用
# vim /etc/logstash/conf.d/elk.conf
添加如下配置
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.1.202:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}

運行logstash指定elk.conf配置文件,進行過濾匹配
#logstash -f /etc/logstash/conf.d/elk.conf

來一發配置安全日誌的並且把日誌的索引按類型做存放,繼續編輯elk.conf文件

vim /etc/logstash/conf.d/elk.conf
添加secure日誌的路徑
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}

file {
path => "/var/log/secure"
type => "secure"
start_position => "beginning"
}
}

output {

if [type] == "system" {

elasticsearch {
hosts => ["192.168.1.202:9200"]
index => "nagios-system-%{+YYYY.MM.dd}"
}
}

if [type] == "secure" {

elasticsearch {
hosts => ["192.168.1.202:9200"]
index => "nagios-secure-%{+YYYY.MM.dd}"
}
}
}

運行logstash指定elk.conf配置文件,進行過濾匹配
[root@elk-master ]# logstash -f /etc/logstash/conf.d/elk.conf

這些設置都沒有問題之後,接下來安裝下kibana,可以讓在前臺展示

Kibana的安裝及使用

安裝kibana環境

官方手冊:https://www.elastic.co/guide/en/kibana/current/install.html

下載kibana的tar.gz的軟體包
# yum install -y kibana

編輯kibana的配置文件
# vim /etc/kibana/kibana.yml

修改配置文件如下,開啟以下的配置
server.port: 5601
server.host: "192.168.99.185"
elasticsearch.hosts: ["http://192.168.99.185:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
啟動服務並設置開機啟動
# systemctl start kibana &&systemctl enable kibana
查看服務埠監聽情況
# netstat -auntlp |grep 5601
tcp 0 0 192.168.73.133:5601 0.0.0.0:* LISTEN 61996/node
Kibana訪問方式
http://192.168.73.133:5601

等待加載完畢之後的界面如圖所示

添加樣本數據

樣本數據儀錶盤

相關焦點

  • 手把手教你搭建 ELK 實時日誌分析平臺
    本篇文章主要是手把手教你搭建 ELK 實時日誌分析平臺,那麼,ELK 到底是什麼呢?ELK 是三個開源項目的首字母縮寫,這三個項目分別是:Elasticsearch、Logstash 和 Kibana。
  • 使用Docker搭建ELK日誌系統
    去elastic官網看一下,果然版本帝就是版本帝,一周一版本。現在我用的版本是基於6.1.1版本的。目標收集Java日誌文件,並且根據文件的不同將日誌分類,比如:訂單日誌,客戶日誌等。日誌文件多行處理總體架構圖2017-12-28-11-23-36準備鏡像6.0之後官方開始自己維護鏡像版本:https://www.docker.elastic.co/。找到需要的ELK鏡像地址,pull下來就好了。
  • Docker 入門到實戰教程(十二)ELK+Filebeat搭建日誌分析系統
    常見解決思路是建立集中式日誌收集系統,將所有節點上的日誌統一收集,管理,訪問。一般大型系統是一個分布式部署的架構,不同的服務模塊部署在不同的伺服器上,問題出現時,大部分情況需要根據問題暴露的關鍵信息,定位到具體的伺服器和服務模塊,構建一套集中式日誌系統,可以提高定位問題的效率。
  • Docker 搭建 ELK 日誌搜索平臺
    ELK 搭建流程1、規範化 Spring Boot 應用的日誌請參考 《Spring Boot Log4j2 日誌性能之巔》,此處為了收集、處理日誌信息,所以修改下日誌的 Pattern,將<Property
  • Storm集群搭建的錯誤分析
    , 網上有很多, 在此推薦一個:http://blog.csdn.net/lzm1340458776/article/details/45370381這個是一個寫的不錯的, 或者說比較詳細的搭建步驟, 不過裡面有一些坑沒有填, 也可能是我遇到了, 在此提出幾個搭建過程中遇到問題的解決方案, 給大家參考:1. java .net
  • 搭建一款私有網盤系統Cloudreve
    前言大家好,我是testerzhang,今天給大家分享一個我以前在簡書平臺編寫的文章:搭建一款私有網盤系統
  • 5分鐘搭建SkyWalking監控系統
    5分鐘搭建SkyWalking監控系統背景公司項目採用微服務的架構,服務很多,人工監控是不可能的,項目的訪問量很大,想通過日誌查找某個方法中性能的問題也是非常困難的
  • 如何用 Docker 快速搭建 MySQL 主從
    本文主要描述如何使用 Docker 技術快速搭建一個 MySQL 主從架構。環境準備CentOS 7Docker 18.09.0MySQL 5.7環境搭建1. 使用 Docker 搜索 MySQL 鏡像,並且拉取 MySQL 5.7 版本。
  • 容器部署日誌分析平臺ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
    ELK日誌分析平臺  ELK日誌分析系統是Logstash、Elastcsearch、Kibana開源軟體的集合,對外是作為一個日誌管理系統的開源方案,它可以從任何來源、任何格式進行日誌搜索、分析與可視化展示。1.ELK日誌分析系統組成  elasticsearch (es) :通過搭建群集;存儲日誌數據,索引日誌數據。
  • 【基礎篇】E0001P Eplan平臺搭建的那些事項
    【基礎篇】E0001P   Eplan平臺搭建的那些事項EPLAN Electric P8是工程系統中集成化進行電氣控制設計的軟體
  • 圖解 LiteOS 開發環境快速搭建
    具有強大的可擴展性,提供給開發者評估及快速設計相關物聯網的應用產品。下圖展示了 BearPi 核心板的構成:這裡要注意的是,由於後面安裝的 LiteOS Studio 軟體包只支持 64 位的版本,所以建議大家開發調試時使用 Windows 7 版本以上 64 位的系統,本文演示所使用的環境就是 Windows 7 的 64 位系統。
  • Django-oscar 快速搭建商城網站
    像豆瓣、Instagram,Spotify,YouTube等官方網站都是基於Django搭建的。Python實用寶典 曾經發表過Django的實戰教程:Python Django快速開發音樂高潮提取網(1)Python Django快速開發音樂高潮提取網(2)Python Django快速開發音樂高潮提取網(3)不過,這三篇文章是基於原生Django開發的。
  • SpringBoot快速搭建
    SpringBoot框架簡介SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月發布第一個版本的全新開源的輕量級框架
  • 使用vue+node搭建前端異常監控系統
    使用vue+node搭建前端異常監控系統使用vue+node搭建前端異常監控系統(一)-原理剖析您將Get的技能收集前端錯誤(原生、React、
  • 用效率軟體Notion搭建個人生活管理系統
    在這一篇中,我會和大家分享這半個月來,我用Notion搭建個人生活管理系統的成果:包括個人圖書館、運動記錄、觀影清單、課程學習、寫作系統、家庭活動等,並如何將這些資料庫關聯後,利用模板需要說明的是,這篇主要分享功能成果,給大家一些Notion使用方法的思路,並不涉及具體技術上的操作指導。在文末我會放上對於我有幫助啟發的Notion深度使用用戶&教程,供大家參考和學習。
  • ELK日誌平臺:安裝配置搭建(1)
    ELK日誌平臺介紹在搜索ELK資料的時候,發現這篇文章比較好,於是摘抄一小段:日誌主要包括系統日誌
  • DNSLOG的快速搭建攻略
    DNS的全稱是Domain Name System(網絡名稱系統),它作為將域名和IP位址相互映射,使人更方便地訪問網際網路. DNSlog就是存儲在DNS Server上的域名信息,它記錄著用戶對域名leishianquan.com等的訪問信息,類似日誌文件.
  • 用docker快速搭建elk日誌平臺
    在後臺服務數量較多時,登陸機器查看日誌是非常低效的。所以需要一個集中的日誌查看平臺。elk便是為此誕生的。
  • 基於 Docker 搭建 MySQL 主從複製
    ,因為是初次使用Docker,MySQL的主從複製之前也在Centos環境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。本篇博文相對簡單,因為是初次使用Docker,MySQL的主從複製之前也在Centos環境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。根據網上教程走還是踩了一些坑,不過所幸最終搭建成功,因此記錄下來,避免以後踩了重複的坑。
  • CentOS搭建Gitlab版本伺服器全解析
    簡介最近感覺就是在不斷的搭建/遷移版本伺服器,而現在市面上關於版本伺服器搭建的指南都流於表面,真正深入骨骼的少之又少