ELK完整部署教程
前言
ELK: Elasticsearch + Logstash + Kibana.
实际部署:
Elasticsearch + Kibana + Logstash + (各种beats) filebeat
filebeat是将本机例如无法二次开发推送给Logstash的应用中的文件log推送给Logstash/Elasticsearch
以下为本机非容器直接部署步骤。本次教程以Ubuntu 22.04系统为例。
Elasticsearch安装
安装Elasticsearch
可直接参考官方教程
安装Elasticsearch :
1 | wget wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.2-amd64.deb |
也可以通过安装GPG Key Ring和source list的方式通过apt install来安装:
1 | wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg |
安装完成后,查看输出窗口,可以看到动态生成的密码。我一般直接将该输出保存文件方便后续使用
1 | --------------------------- Security autoconfiguration information ------------------------------ |
默认安装成功后,我们根据输出提示,启用elasticsearch
1 | sudo systemctl daemon-reload |
默认启用SSL,我们可以通过https://192.168.1.20:9200访问。
用户名:elastic
密码:输出生成的密码(例如本例中:_XocGB8Pt*gTl+0f+FlU)
也可以使用curl来访问测试:
不过在此之前,将密码临时保存成变量
1 | export ELASTIC_PASSWORD="your_password" |
注意
默认安装位置为/usr/share/elasticsearch, 其他的同理。
以下命令可以生成kibana专属注册码,会使得kibana添加elasticsearch信息。如果之后安装好kibana没有注册,kibana也会弹窗让你输入。
1 | /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana |
安装Kibana
同样可以使用apt install安装或者deb/rpm安装
Kibana官方安装方法
Kibana配置
配置位于/etc/kibana/kibana.yml
1 | # 只需要修改server.host即可。 |
如果你使用阿里云,有EIP和VPC内网IP,请直接输入VPC的内网IP即可,不需要输入公网IP
这个时候应该可以通过非本机来登录Kibana
Digital Ocean教程提到安装Nginx并配置成反向代理。(他配置是反向代理到80端口)
新版本本身不需要额外反向代理。除非你想端口换成80。而且也不需要额外配置网页用户验证用户名密码。
Kibana SSL
1 | # 生成PEM格式的SSL证书 |
配置kibana.yml
1 | # =================== System: Kibana Server (Optional) =================== |
重启Kibana,即可使用HTTPS连接Kibana。
Kibana Enrollment
安装完成后在systemctl status kibana中可以看出
1 | http://192.168.1.20:5601/?code=123456 |
通过以上链接进入Kibana面板进入配置。
1 | /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana |
如果没有使用以上链接,在输入完enrollment注册码后,会让你输入验证码,通过运行/usr/share/kibana/kibana-verification-code即可。
logstash安装
logstash安装同样通过官网查看教程即可
logstash官方安装方法
logstash配置一
将配置从/etc/logstash/logstash-sample.conf复制并修改到/etc/logstash/conf.d/目录下,例如命名为10-input.conf
配置可以将input,output分开,这里为了方便,我们不分开成两个文件。
1 | # 以logstash用户名义运行, 并且配置项路径为/etc/logstash |
使用用户名logstash运行时,由于文件夹/usr/share/logstash归属权为root,会报错Your settings are invalid. Reason: Path “/usr/share/logstash/data” must be a writable directory. It is not writable. 需要将文件夹及其子文件夹都修改用户归属权为logstash
1 | chown logstash /usr/share/logstash/data -R |
同理,权限导致的错误 File does not exist or cannot be opened /etc/elasticsearch/certs/http_ca.crt
1 | # 单独授权certs/http_ca.crt, certs文件夹都会报错。 |
示例配置,输出到elasticsearch和stdout
1 | input { |
这里的index非常关键,这将会是使用Kibana搜索的数据库名字来源。
为了方便测试logstash与elasticsearch连接测试,以及Kibana数据搜索测试。如果有报错提示,例如
[WARN ][logstash.outputs.elasticsearch][main][819e4368074e36871183245e19ecc296ba42dc18adefe03abf70bb82708ff262] Badly formatted index, after interpolation still contains placeholder: [logs-%{[@metadata][file]}-%{[@metadata][version]}-2013.12.11]
则代表没有上传成功。
本文配置简化为
1 | index => "logs-%{+YYYY.MM.dd}" |
这时候,通过Analytics的Discover, Data views选择logs-*即可看到日志。
filebeat安装
安装filebeat
默认安装好之后,不需要到/usr/share/filebeat执行,直接输入filebeat执行即可。
1 | # 查看模块以及激活模块 |
默认情况下,已激活的模块内的配置文件其实还是enabled: false,需要手动进去修改成enable。
不然你会在systemctl status filebeat看到报错。运行失败。
creating module reloader failed: could not create module registry for filesets: module nginx is configured but has no enabled filesets
路径示例:/etc/filebeat/module.d/system.yaml
示例nginx.yaml:
1 | - module: nginx |
以上的配置文件需要注意的是,官网没有告诉你默认由于elasticsearch以及有自签名的TLS了,除了加ca_trusted_fingerprint外,还需要加verification_mode: none。
或者写成ssl.verification_mode: none
获取ca_trusted_fingerprint:
1 | openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt |
在输出的第一行就是fingerprint,但是由于多了冒号(:),你还需要将冒号删除或者替换。还有更方便的方法就是查看kibana的配置。
在最后一行,如果已经enroll的话,会添加了自动注册后的信息。而这个信息,在最后有ca_trusted_fingerprint,复制粘贴即可。
1 | # /etc/kibana/kibana.yaml |
测试filebeat连接Logstash
1 | filebeat test config |
测试前,请先运行Logstash。
为了简单,我们的logstash.yml只有input和output。
1 | # Sample Logstash configuration for creating a simple |
如果你想要output是logstash的话,请不要与output.elasticsearch一起启用。请单独启用一个。
如果遇到错误Exiting: /var/lib/filebeat/filebeat.lock: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data),请停止filebeat (systemctl stop filebeat)
以官方教程中为例:设置filebeat.inputs为教程下载的log文件。并把输出设置为output.logstash
Parsing Logs with Logstash
1 | filebeat -e -c filebeat.yml -d "publish" |
这个时候,回到Kibana, 就可以看到一堆log了。
- 标题: ELK完整部署教程
- 作者: 暗香疏影
- 创建于 : 2024-03-09 00:00:00
- 更新于 : 2024-03-09 00:00:00
- 链接: https://blog.23ikr.com/2024/03/09/2024-03-09-ELK-full-config-guide/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。