EFK9.0.3 windows搭建
背景
最近某个功能要使用到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证书路径修改。