記錄一下Elasticsearch+Filebeat+Kibana搭建過程(單節點)

2021-02-16 IT實戰聯盟
背景

作為一個內容類應用,看新聞讀資訊一直是頭條用戶的核心需求,頁面的打開速度直接關係到用戶使用頭條的核心

傳統查看日誌的形式都是通過連接伺服器查看伺服器日誌完成,這種方式會有以下弊端:

效率太慢,需要不停的連接伺服器

日誌文件本身對條件篩選並不友好

需要查看日誌的人員對linux系統有些許熟悉

如果涉及分布式服務系統,需要同時查看多個服務的日誌才能找到對應一條請求的整體日誌

日誌無法做整體的統計

日誌收集系統介紹(Elasticsearch+Filebeat+Kibana)

ElasticSearch(https://www.elastic.co/cn/elasticsearch/) 是一個基於Lucene的開源分布式搜索伺服器。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。它提供了一個分布式多用戶能力的全文搜尋引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是第二流行的企業搜尋引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

Filebeat(https://www.elastic.co/cn/beats/) 是一個完全開源的工具,屬於Beats中的一種,具體介紹可以從官網中查看,它可以對你的日誌進行收集、分析,支持大量的數據獲取方法,並將其存儲供以後使用(如搜索),server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去,Filebeat對比Logstash更為輕量,但是如果要實現過濾等功能需要用到ES中pipeline技術。

Kibana(https://www.elastic.co/cn/kibana) 是一個基於瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費的工具,Kibana可以為 Filebeat 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數據日誌。

單節點EFK搭建

使用版本:Elasticsearch6.3.2,Filebeat6.3.2,Kibana6.3.2
因為官網下載速度太慢,可以使用以下連結下載:

Elasticsearch6.3.2: https://pan.baidu.com/s/1i-dbRzQshpro8RQqM9cqeQ 提取碼:1234

Filebeat6.3.2: https://pan.baidu.com/s/1xiQtZe6IVtaPBnjcJTALnA 提取碼:1234

Kibana6.3.2: https://pan.baidu.com/s/1JC8WeMqLsxtIELI4wx_MDw 提取碼:1234

Elasticsearch

#將下載的文件上傳到伺服器

#解壓文件
tar -zxvf elasticsearch-6.3.2.tar.gz -C /usr/local/elk/
#更改解壓後文件夾名稱
mv /usr/local/elk/elasticsearch-6.3.2 /usr/local/elk/es

es不能用root用戶啟動,因為es可以接收用戶輸入的腳本並且執行,為了系統安全考慮,需要重新創建用戶。

useradd es_user

切換root用戶將剛剛解壓的es文件夾設置為所有人可讀可寫

su root
chmod -R 777 /usr/local/elk/es/

因為es對當前用戶的內存和可打開的文件數有最小限制,我們需要修改普通用戶的最大內存和最大可打開文件數,如果伺服器本身沒有這麼多內存,可以修改es啟動變量來減少使用的內存大小,具體操作自行查詢

#內存修改
vi /etc/sysctl.conf
#添加以下配置:
vm.max_map_count=262144 #具體大小可以查看es最小內存配置
#執行以下命令生效
sysctl -p

#最大可打開的文件數
vi /etc/security/limits.conf
#添加以下配置
es_user soft nofile 65535
es_user hard nofile 65535

設置配置文件elasticsearch.yml,這裡我只用了部分配置,具體配置詳解:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules.html

vi /usr/local/elk/es/config/elasticsearch.yml
#配置內容
cluster.name: es
node.name: node-1
node.master: true
node.data: true
path.data: /usr/local/elk/es/data
path.logs: /usr/local/elk/es/logs
network.host: 0.0.0.0
http.port: 9200

啟動es,並且查看

#切換用戶
su es_user
cd /usr/local/elk/es/
#後臺啟動es,不輸出日誌
nohup bin/elasticsearch >/dev/null 2>&1 &
#後臺啟動es,輸出日誌es_nohup.log
nohup bin/elasticsearch >es_nohup.log 2>&1 &

驗證啟動是否成功

http://ip:9200/

停止es

netstat -tunlp | grep 9200
kill -9 PID

Kibana

#將下載的文件上傳到伺服器

#解壓文件
tar -zxvf kibana.tar -C /usr/local/elk/

修改配置文件kibana.yml

vi /usr/local/elk/kibana/config/kibana.yml
#配置內容
server.port: 5601
server.host: "0.0.0.0"
#ip 是elasticsearch所在伺服器的IP
elasticsearch.url: "http://ip:9200"

啟動kibana

cd /usr/local/elk/kibana
#後臺啟動kibana,不輸出日誌
nohup config/kibana >/dev/null 2>&1 &
#後臺啟動kibana,輸出日誌 kibana_nohup.log
nohup config/kibana >kibana_nohup.log 2>&1 &

停止kibana

netstat -tunlp | grep 5601
kill -9 PID

Filebeat

#將下載的文件上傳到伺服器

#解壓文件
tar xzvf filebeat-6.3.2-linux-x86_64.tar.gz -C /usr/local/elk/
#更改解壓後文件夾名稱
mv /usr/local/elk/filebeat-6.3.2-linux-x86_64 /usr/local/elk/filebeat

修改配置文件filebeat.yml,可以配置多個配置文件,在啟動時選擇,filebeat配置詳細: https://www.elastic.co/guide/en/beats/filebeat/6.3/filebeat-configuration.html

filebeat.inputs:
- type: log
#啟用
enabled: true
#掃描路徑
paths:
- /home/levi/project_1/logs/log_error.log
- /home/levi/project_1/logs/log_warn.log
- /home/levi/project_1/logs/log_info.log
include_lines: ['INFO', 'WARN', 'ERROR']
#忽略12個小時之前更新的文件
ignore_older: 12h
#自定義欄位
fields:
log_source: project_1
#多行日誌配置
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
#每隔 scan_frequency 時間讀取一次文件內容。對於關閉的文件,如果後續有更新,則經過 scan_frequency 時間後,Filebeat 將重新打開該文件,讀取新增加的內容
scan_frequency: 10s
#生命周期持續時間
close_inactive: 2h

- type: log
enabled: true
paths:
- /home/levi/project_2/logs/log_error.log
- /home/levi/project_2/logs/log_warn.log
include_lines: ['INFO', 'WARN', 'ERROR']
ignore_older: 12h
fields:
log_source: project_2
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
scan_frequency: 10s
close_inactive: 2h

- type: log
enabled: true
paths:
- /home/levi/project_3/logs/*.log
include_lines: ['INFO', 'WARN', 'ERROR']
ignore_older: 12h
fields:
log_source: project_3
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
scan_frequency: 10s
close_inactive: 2h

- type: log
enabled: true
paths:
- /home/levi/project_4/logs/*.log
include_lines: ['INFO', 'WARN', 'ERROR']
ignore_older: 12h
fields:
log_source: project_4
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
scan_frequency: 10s
close_inactive: 2h

#==================== Elasticsearch template setting ==========================

setup.template.settings:
#索引分片數量配置
index.number_of_shards: 5

#- Elasticsearch output
output.elasticsearch:
#es 對應伺服器ip
hosts: ["ip:9200"]
#自定義索引名稱
index: "levi-%{[fields.log_source]}"
#es中實現的過濾pipeline綁定
pipeline: "levi-elk-pipeline"
setup:
#es的filebeat模板,用來設置在Elasticsearch中的映射,如果模板加載是啟用的(默認的),Filebeat在成功連接到Elasticsearch後自動加載索引模板
template:
enabled: true
name: "levi"
pattern: "levi-*"
overwrite: true

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

啟動filebeat之前需要初始化es中的pipeline ,pipeline詳解: https://www.elastic.co/guide/en/elasticsearch/reference/6.3/pipeline.html

PUT _ingest/pipeline/levi-elk-pipeline
{
"description": "levi elk pipeline",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"""(?<timestamp>(?:%{YEAR}-%{MONTHNUM}-%{MONTHDAY})%{SPACE}(?:%{HOUR}:%{MINUTE}:%{SECOND}.\d{3}))(?<thread>(?:%{SPACE}\[.*?\]%{SPACE}))%{LOGLEVEL:level}(?<class>(?:%{SPACE}(\w+(\.)+)+\w*%{SPACE}))"""
]
}
},
{
"gsub": {
"field": "thread",
"pattern": """\s\[""",
"replacement": ""
}
},
{
"gsub": {
"field": "thread",
"pattern": """\]\s""",
"replacement": ""
}
},
{
"gsub": {
"field": "class",
"pattern": "\\s",
"replacement": ""
}
},
{
"date": {
"field": "timestamp",
"formats": [
"yyyy-MM-dd HH:mm:ss.SSS"
],
"timezone": "Asia/Shanghai"
},
"remove": {
"field": "timestamp"
}
}
]
}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

啟動filebeat

cd /usr/local/elk/filebeat
#後臺啟動filebeat 且不輸出啟動日誌
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
#後臺啟動filebeat 輸出啟動日誌 filebeat_nohup.log
nohup ./filebeat -e -c filebeat.yml >filebeat_nohup.log 2>&1 &

停止filebeat

ps -ef|grep filebeat
kill -9 PID

相關焦點

  • Elasticsearch + Kibana 集群環境搭建
    本文主要介紹 elasticsearch 集群以及 kibana 的環境搭建。ElasticsearchElasticsearch 可以理解為一個支持模糊查詢的資料庫,用來存儲日誌。下載 Elasticsearchwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gztar -xzvf elasticsearch-6.2.3.tar.gz修改配置文件修改 config/elasticsearch.yml
  • 監控 Elasticsearch 及 Kibana
    在生成證書的過程中,它將生成 metricbeat 的證書:metricbeat.crtmetricbeat.key這個證書將在下面的 Metricbeat 的配置中被使用到。/filebeat test outputelasticsearch: https:  parse url... OK  connection...    parse host... OK    dns lookup... OK    addresses: 192.168.0.4    dial up... OK  TLS...
  • 容器部署日誌分析平臺ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
    像集群一樣,節點也是通過名字來標識,默認是在節點啟動時隨機分配的字符名。當然,你可以自己定義。該名字也很重要,在集群中用於識別伺服器對應的節點。  節點可以通過指定集群名字來加入到集群中。默認情況,每個節點被設置成加入到elasticsearch集群。如果啟動了多個節點,假設能自動發現對方,他們將會自動組建一個名為elasticsearch的集群。
  • ​打開ElasticSearch、kibana、logstash的正確方式
    作者:玩世不恭的Coder時間:2020-03-08說明:原創不易,本文為原創文章,未經允許不可轉載,轉載前請聯繫作者打開ElasticSearch、kibana、logstash的正確方式前言一、ELK系統的搭建Elasticsearch的安裝安裝kibana安裝logstash二、基於Logstash對Elasticsearch索引庫中數據的導入和導出使用
  • Docker 入門到實戰教程(十二)ELK+Filebeat搭建日誌分析系統
    Docker安裝ElasticSearch2.1 官網安裝docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.12.2 設置參數在elasticsearch的docker版本文檔中,官方提到了vm.max_map_count的值在生產環境最少要設置成
  • 用docker 安裝 Filebeat、Logstash、Kibana是什麼體驗
    ,不受格式或複雜度的影響。docker run -p 5044:5044 --name my-logstash \-v /mydata/logstash/logstash.yml:/usr/share/logstash
  • ElasticSearch性感體驗
    一般工作方式為c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往Elasticsearch上去。Filebeat是本地文件的日誌數據採集器。作為伺服器上的代理安裝,Filebeat監視日誌目錄或特定日誌文件,並將它們轉發給Logstash、Kafka等。
  • FileBeat + Kafka + ELK搭建與簡單示例
    最近調研了一下ELK,自己也嘗試搭建了一套環境,用於學習, 現將整個部署的過程記錄下來
  • Elasticsearch&Kibana從6.0升級到7.9的踩坑全過程
    ,加上工欲善其事必先利其器的古訓,喜新厭舊的人之常情終於戰勝了懶惰保守的觀望思維,於是近期將elasticsearch&kibana升級提上日程。由於我們公司是elasticsearch&kibana的重度用戶,而且絕大多數有價值的數據都存在elasticsearch中,所以就先在一個單機版本的elasticsearch上進行試驗填坑,成功後再複製到集群上,這也就是本文的來源。
  • elasticsearch和kibana的保姆級安裝教程
    目錄導航為什麼使用docker容器部署這些應用elasticsearch安裝安裝kibana安裝ik分詞器插件安裝elasticsearch-head插件參考文獻docker network create esnet運行elasticsearch容器,單節點版本,命令如下:docker run -d --name es \  -p 9200:9200 -p 9300:9300 \  --net esnet \
  • elk的簡單搭建
    日誌文件.log ——> logstash(日誌收集) ——> elasticsearch(存儲和搜索)——> kibana(可視化和生成報表)//2.以Beats 作為日誌搜集器日誌文件.log ——> betes(日誌收集) ——> logstash(日誌過濾) ——> elasticsearch(存儲和搜索)——> kibana(可視化和生成報表
  • ELK教程1:ElasticSearch集群的部署
    本篇文章將講講解如何部署ELK,然後講解如何 使用Filebeat採集Spring Boot的日誌輸出到Logstash上,logstash再將日誌輸出到Elasticsearch上,最後展示到kibana上面。
  • Elk環境篇 --- 本地快速搭建你的ElasticSearch及Kibana
    之後修改一下配置文件,在config文件夾中 vim elasticsearch.ymlcluster.name: myesnode.name: node3path.data: 自己的安裝路徑/elasticsearch
  • 手把手教你搭建一個 Elasticsearch 集群
    不過,ES最難的地方應該不是它的運用,而是它的部署,坑真的超級多,所以這篇文章,我們就來介紹一下怎麼部署 ElasticSearch 集群吧!以下內容來源:進擊的Coder(ID:FightingCoder)為何要搭建 Elasticsearch 集群凡事都要講究個為什麼。在搭建集群之前,我們首先先問一句,為什麼我們需要搭建集群?它有什麼優勢呢?
  • Fluentd+Elasticsearch+kibana 日誌收集部署實戰
    流程每個node節點上面的fluentd監控並收集該節點上面的系統日誌,並將處理過後的日誌信息發送給ElasticSearch,Elasticsearch匯總各個node節點的日誌信息,最後結合Kibana 實現web UI界面的數據展示。
  • Filebeat、Logstash、Rsyslog 各種姿勢採集Nginx日誌
    這次示例Elasitcsearch是三個節點組成的集群172.28.65.22、172.28.65.23、172.28.65.24,172.28.65.30 是kibana的地址,172.28.65.32是數據採集伺服器,上面裝有logstash、nginx、 filebeat。一般來說採集伺服器上有logstash,而nginx、 filebeat應該是裝在採集目標上。
  • Elastic App Search初體驗
    elasticsearch我們選擇的是使用rpm包的安裝方式,elasticsearch-7.9.0-x86_64.rpm,elastic7.9版本已經自帶打包了jdk,無需再獨立安裝jdk。CA,一路回車即可/usr/share/elasticsearch/bin/elasticsearch-certutil ca//然後使用ca進行證書的籤發,生成elastic-certificates.p12,一路回車即可/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
  • 通過filebeat、logstash、rsyslog採集nginx日誌的幾種方式
    這次示例Elasitcsearch是三個節點組成的集群172.28.65.22、172.28.65.23、172.28.65.24,172.28.65.30是kibana的地址,172.28.65.32是數據採集伺服器,上面裝有logstash、nginx、filebeat。
  • 終於有人把elasticsearch原理講通了!
    呂老師:沒錯,在elasticsearch中,節點是對等的,節點間會通過自己的一些規則選取集群的master,master會負責集群狀態信息的改變,並同步給其他節點。呂老師:其實很多公司都用elasticsearch搭建elk系統,也就是日誌分析系統。其中e就是elasticsearch,l是logstash,是一個日誌收集系統,k是kibana,是一個數據可視化平臺。