背景
最近某個功能要使用到ELK(ElasticSearch、Logstash、Kibana)采集日志,對數據進行分析,網上百度了一下,目前推薦不使用Logstash而使用Filebeat ,即EFK。
下載鏈接
Elasticsearch
Kibana
Filebeat
安裝前提
需安裝java環境,在此不敘述,不會的自行百度安裝。
下載示例
Elasticsearch安裝
下載完成后解壓對應的zip包,然后配置文件在config目錄下,啟動在bin目錄下的elasticsearch.bat,不需要改動任何配置,直接點擊bat命令啟動即可。
賬號密碼和證書
啟動bat過程中會出現賬號(默認都是elastic)密碼和Kibana的認證證書,記得保存下來后續登錄需要用到,注意密碼和證書的首位空格去掉,可以使用bin/elasticsearch-reset-password -u elastic
命令更改密碼。
配置說明
9.0.3版本默認以ssl方式登錄的,啟動成功后默認都是開啟安全保護。
xpack.security.enabled: false:此設置表示你已禁用了 Elasticsearch 的安全功能。這意味著 Elasticsearch 不會執行用戶身份驗證和訪問控制。請確保你在另外的方式下對 Elasticsearch 進行了安全保護。
xpack.security.enrollment.enabled: true:此設置啟用了 Elasticsearch 的安全證書認證功能。通過此功能,你可以使用證書來進行節點之間的相互認證。
xpack.security.http.ssl.enabled: false:此設置表示你已禁用了通過 HTTPS 加密來保護 Kibana、Logstash 和 Agents 與 Elasticsearch 之間的連接。這意味著這些連接將以明文方式傳輸數據。
xpack.security.transport.ssl.enabled: true:此設置表示你已啟用了節點之間的傳輸層加密和相互認證功能。這樣可以保護 Elasticsearch 集群節點之間的通信安全。
cluster.initial_master_nodes: [“PC-20230824PCHD”]:此設置指定了初始主節點的名稱。只有具有該名稱的節點才能成為集群的初始主節點。
http.host: 0.0.0.0:此設置允許從任何地方的 HTTP API 連接。連接是加密的,需要用戶身份驗證。
啟動成功
訪問elasticsearch登錄鏈接,https://localhost:9200,注意是https,輸入上面獲取的賬號密碼,啟動成功。
KIBANA安裝
下載完成后解壓對應的zip包,然后配置文件在config目錄下,修改配置文件,將i18n.locale注釋放開,修改為zh-CN,為中文啟動,啟動在bin目錄下的kibana.bat,不需要改動任何配置,直接點擊bat命令啟動即可。
啟動成功
啟動過程中會出現登錄鏈接,點擊跳轉登錄即可,在cmd窗口中按住ctrl鍵+鼠標點擊即可跳轉登錄至瀏覽器,kibana登錄鏈接,http://localhost:5601。
輸入令牌
登錄過程中需要輸入令牌,將上面啟動es獲取到的令牌輸入即可。
如果令牌忘記保存了,可以在es的bin目錄輸入下面命令重新獲取令牌,elasticsearch-create-enrollment-token -s kibana
成功后出現登錄界面,輸入es的賬號密碼即可登錄。
登陸成功后顯示中文頁面
啟動報錯
啟動完成后,最后會出現一行錯誤(雖然不影響), Error: Unable to create alerts client because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.因為es沒有encrypted-saved-objects插件導致,解決方法如下:在es的bin目錄下執行命令elasticsearch-plugin list
,查看當前的插件,未安裝則使用命令elasticsearch-plugin install com.floragunn:encrypted-saved-objects:x.y.z
進行安裝,其中x.y.z 是插件的版本號,你需要替換為適合你 Elasticsearch 版本的正確版本。
輸入elasticsearch-plugin list
輸入
elasticsearch-plugin install com.floragunn:encrypted-saved-objects:9.0.3
但是使用該命令安裝失敗,deepseek回答說是9版本不支持插件方式,可回退至6或者7的版本,不影響使用,跳過。
配置說明
因為elasticsearch是以ssl方式啟動的,所以kibana配置也是如此,啟動成功后會出現下面配置。
FILEBATE安裝
下載完成后解壓對應的zip包,在當前文件夾下輸入cmd跳轉到命令臺,分別輸入filebeat.exe setup
,filebeat.exe -e -c filebeat.yml
即可,其實只輸入第二個命令即可啟動,第一個命令作用如下,首次時間較久:
Index setup finished
在這個步驟中,它將創建一個 index template,并創建好相應的 index pattern。我們可以在 Kibana 中看到如下的一個新的 index pattern 被創建,所有的 filebeat 導入的文件將會自動被這個 index pattern 所訪問。
配置管理
V9版本的filebeat.inputs.types屬性應該有了變更,要用filestream不能用log,或許是我沒弄明白,用log是啟動不了的,會報錯誤文件找不到。
type: filestream,指定輸入類型為 filestream,表示監控文件內容的變化(實時讀取追加的內容,適合日志或持續更新的文件)
id,唯一標識符,用于區分多個輸入配置。在日志或監控中可通過此 ID 追蹤數據來源。
enabled,是否啟用此輸入配置。true 表示啟用,false 表示禁用(如你最初的配置)。
paths,指定要監控的文件路徑,支持通配符(如 *.csv)。注意:路徑需用引號包裹(尤其含中文或空格時)。建議使用絕對路徑。跨平臺路徑建議用 /(Windows 也支持)。
錯誤說明1
Exiting: couldn't connect to any of the configured Elasticsearch hosts. Errors: [error connecting to Elasticsearch at http://localhost:9200: Get "http://localhost:9200": EOF]
出現該錯誤的原因是filebeat默認用的是非ssl模式,所以需要修改filebeat.yml配置,將host改為https,證書路徑在es路徑下面的config/certs下面。
output.elasticsearch:# Array of hosts to connect to.hosts: ["https://localhost:9200"]ssl:# 替換為你的 CA 證書路徑 注意使用/不要用\certificate_authorities: ["D:/Program Files/elasticsearch-9.0.3/config/certs/http_ca.crt"]# 嚴格驗證證書verification_mode: "full"# Performance preset - one of "balanced", "throughput", "scale",# "latency", or "custom".preset: balanced# Protocol - either `http` (default) or `https`.#protocol: "https"# Authentication credentials - either API key or username/password.#api_key: "id:api_key"username: "elastic"#替換為自己的密碼password: "8fy0k7b_mAu-m+aCD+rX"
錯誤說明2
Exiting: error loading config file: yaml: line 166: found unknown escape character
YAML 文件對 反斜杠 \ 敏感,如果路徑或字符串中包含 \ 但沒有正確轉義,就會報錯,改為正斜杠(/),certificate_authorities證書路徑修改。