官網地址: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)
本次使用2臺伺服器來進行模擬集群,所以請準備2臺伺服器
Centos7.6 兩臺
IP:192.168.73.133 安裝:elasticsearch、logstash、Kibana、java
192.168.73.135 安裝: elasticsearch、logstash
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)
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
本次環境我們使用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 狀態是一個概覽你的集群並了解眼下正在發生什麼的好辦法
安裝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
官方指南:
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
運行成功以後輸入以及標準輸出結果
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環境
官方手冊: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
等待加載完畢之後的界面如圖所示
添加樣本數據
樣本數據儀錶盤