ELK Stack:使用SSL/TLS加密配置kibana 7.x
Elasticsearch ELK Stack教程:
安装和配置带有3个节点的ElasticSearh Cluster 7.5
启用HTTPS并配置SSS/TLS以保护Elasticsearch Cluster
为Elasticsearch Cluster安装和配置带有SSL/TLS的Kibana 7.5
配置Metricbeat 7.5以通过HTTPS监视Elasticsearch群集设置
使用Elasticsearch安装和配置Logstash 7.5
Kibana概述
Kibana是Elastic Stack的UI,主要用于数据分析和可视化。
Kibana还提供了开发人员工具,对于运行Elasticsearch查询非常方便。
Kibana监视功能可用于两个单独的目的
可视化来自Elastic Stack的监视数据。
我们可以实时查看Elasticsearch,Logstash和Beats的运行状况和性能数据,以及分析过去的性能。
监视Kibana本身并将该数据路由到监视集群。如果启用跨Elastic Stack的监视,则基于其持久性UUID,每个Elasticsearch节点,Logstash节点,Kibana实例和Beat都被认为是唯一的,当节点或者实例启动时,UUID会写入到path.data目录中。
重要的提示:
确保我们安装的Kibana版本与Elasticsearch兼容非常重要。
在elasticsearch页面上检查兼容性
安装Kibana
使用RPM软件包,我们可以在openSUSE,CentOS或者基于Red Hat的系统上安装Kibana。
我们可以从Elastic或者apt存储库下载RPM软件包。
我们可以免费使用Elastic许可下的RPM软件包。
提示:
如果Elasticsearch集群中有多个节点,则在节点之间分配Kibana请求的最简单方法是在仅Elasticsearch协调节点上配置Kibana。
要将elasticsearch配置为协调节点,请使用elasticsearch.yml
中的以下值。
在本文中,我们使用一个单独的节点来安装和配置带有SSL/TLS的Kibana7.x。
node.master: false node.data: false node.ingest: false
目前,在撰写本文时,Kibana 7.5.1是以下链接上可用的最新可用版本,我们已将其用于安装目的
[root@centos-8 ~]# rpm -Uvh https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-x86_64.rpm [root@centos-8 ~]# rpm -q kibana kibana-7.5.1-1.x86_64
如果我们尝试在未启用安全性的情况下启动kibana服务,则很可能会遇到以下错误(取决于我们使用的许可证类型)
Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node. Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]
我在上一篇文章中介绍了实现安全性的这一部分
监控Elasticsearch集群
要监视Elasticsearch集群并控制如何从Elasticsearch节点收集数据,请在所有集群节点的" elasticsearch.yml"中配置" xpack.monitoring.collection"设置。
xpack.monitoring.collection.enabled: true xpack.monitoring.elasticsearch.collection.enabled: false
配置Kibana
修改/etc/kibana/kibana.yml
文件中的以下指令以配置kibana并在Elastic Stack中启用监视
server.port:
默认值:5601 Kibana由后端服务器提供服务。
此设置指定要使用的端口。server.host:
此设置指定后端服务器的主机。
要允许远程用户连接,请将值设置为Kibana服务器的IP地址或者DNS名称。server.name:易于识别的显示名称,用于标识此Kibana实例。
elasticsearch.hosts:
用于所有查询的Elasticsearch实例的URL。
此处列出的所有节点必须位于同一群集上。elasticsearch.username
和elasticsearch.password:
如果Elasticsearch受基本身份验证保护,则这些设置将提供Kibana服务器在启动时用于对Kibana索引进行维护的用户名和密码。
Kibana用户仍然需要通过Elasticsearch进行身份验证,该令牌通过Kibana服务器代理。
修改/etc/kibana/kibana.yml
文件以配置Kibana并监视elasticsearch集群。
以下是我的示例配置文件:
[root@centos-8 elasticsearch]# sed '/^#/d' /etc/kibana/kibana.yml | sed '/^$/d' server.port: 5601 server.host: "192.168.0.14" server.name: "centos-8.example.com" elasticsearch.username: "kibana" elasticsearch.password: "Passw0rd"
(可选)如果我们不想在配置Kibana时将用户ID和密码放在kibana.yml
文件中,请改为将其存储在密钥库中。
运行以下命令来创建Kibanakeystore
并添加安全设置:
[root@centos-8 ~]# /usr/share/kibana/bin/kibana-keystore create --allow-root Created Kibana keystore in /var/lib/kibana/kibana.keystore [root@centos-8 ~]# /usr/share/kibana/bin/kibana-keystore add elasticsearch.username --allow-root Enter value for elasticsearch.username: ** **** [root@centos-8 ~]# /usr/share/kibana/bin/kibana-keystore add elasticsearch.password --allow-root Enter value for elasticsearch.password: ** ****
出现提示时,为这些设置值指定kibana
内置用户及其密码。
当我们启动Kibana
时,设置将自动应用。
对于基本许可证和生产许可证,重要的是要启用安全性以配置Kibana仪表板。
启用HTTPS通信(可选)
提示:
我们可以选择避免此步骤,但是建议通过在HTTPS上传递流量来增强安全性。
用于PKI身份验证的证书必须与用于加密HTTP通信的证书由同一CA签名。
通常,这些文件将由组织内的官方CA签署。
但是,由于我们已经创建了CA和其他证书,因此我们将使用它们来为Kibana启用https通信。
由于我们要在centos-8.example.com
上安装kibana,因此我们将使用为centos-8
创建的密钥。
创建/etc/kibana/config/certs /
目录,我们将其中存储启用`https'所需的密钥
[root@centos-8 ~]# ls -l /etc/kibana/certs/ total 12 -rw-r--r-- 1 root root 1200 Dec 27 18:52 ca.crt -rw-r--r-- 1 root root 1200 Dec 27 18:52 centos-8.crt -rw-r--r-- 1 root root 1679 Dec 27 18:52 centos-8.key
设置server.ssl.enabled
,server.ssl.key
和server.ssl.certificate
属性。
以下是我的kibana.yml
中的内容。
server.ssl.enabled: true server.ssl.certificate: /etc/kibana/certs/centos-8.crt server.ssl.key: /etc/kibana/certs/centos-8.key
配置Kibana以通过HTTPS连接到Elasticsearch
要执行此步骤,我们必须启用Elasticsearch安全功能,或者必须具有为Elasticsearch提供HTTPS端点的代理。
在Kibana配置文件kibana.yml
的elasticsearch.hosts
设置中指定HTTPS协议:
elasticsearch.hosts: ["https://192.168.0.11:9200", "https://192.168.0.12:9200", "https://192.168.0.13:9200"]
如果我们使用自己的CA为Elasticsearch签名证书,请在" kibana.yml"中设置" elasticsearch.ssl.certificateAuthorities"设置以指定PEM文件的位置。
elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/certs/ca.crt" ]
设置certificateAuthorities
属性可让我们使用默认的verificationMode
选项full。
elasticsearch.ssl.verificationMode: 'full'
其中
server.ssl.enabled:
为从Kibana服务器到浏览器的传出请求启用SSL。
设置为true时,需要server.ssl.certificate
和server.ssl.key
。server.ssl.certificate
和server.ssl.key:
分别是PEM格式的SSL证书和SSL密钥文件的路径。elasticsearch.ssl.certificateAuthorities:可选设置,使我们可以为Elasticsearch实例的证书颁发机构指定PEM文件的路径列表。
elasticsearch.ssl.verificationMode:
控制Elasticsearch提供的证书的验证。
有效值为none,certificate和full。
完全执行主机名验证,而证书不执行。
配置防火墙
Kibana使用5601 TCP端口,因此我们可以在防火墙中启用该端口。
[root@centos-8 ~]# firewall-cmd --add-port=5601/tcp --permanent success [root@centos-8 ~]# firewall-cmd --reload success
启动Kibana服务器
我们已经完成了通过HTTPS配置Kibana的步骤,我们可以使用systemctl
启动kibana服务。
此命令将启动服务,并使更改在重新引导后永久存在。
[root@centos-8 ~]# systemctl enable kibana --now
检查Kibana服务器上的端口5601端口是否处于LISTEN状态
[root@centos-8 ~]# netstat -ntlp | grep node tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 4464/node
检查服务状态
[root@centos-8 ~]# systemctl status kibana ● kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2019-12-24 23:03:15 IST; 27s ago Main PID: 12928 (node) CGroup: /system.slice/kibana.service └─12928 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.yml Dec 24 23:03:18 centos-8.example.com kibana[12928]: {"type":"log","@timestamp":"2019-12-24T17:33:18Z","tags":["info","plugins","data"],...lugin"} Dec 24 23:03:38 centos-8.example.com kibana[12928]: {"type":"log","@timestamp":"2019-12-24T17:33:38Z","tags":["info","plugins","licensi...ctive"}
等待几秒钟,并检查来自kibana的最新日志,以确保没有报告任何错误,并且我们还没有获得" Kibana服务器尚未准备好"的信息。
[root@centos-8 ~]# journalctl -u kibana.service
或者使用journalctl
监视实时日志
[root@centos-8 ~]# journalctl -u kibana.service -f
登录Kibana UI
从浏览器访问" https://192.168.0.14:5601/"。
使用"弹性"用户和我们在本文中使用" elasticsearch-setup-passwords"创建的"密码"登录。
提示:
启动kibana服务后几秒钟,我们可能会收到Kibana服务器尚未就绪的消息。
等待几分钟,然后刷新浏览器。
但是,如果我们继续在GUI上收到Kibana服务器尚未就绪的消息,请检查journalctl -u kibana.service
以获取任何错误消息。
我们可以使用journalctl从Kibana Server查看实时日志。
对错误消息进行故障排除:
以下是在Kibana服务器配置中可以看到的一些常见错误消息
错误:ElasticsearchException:无法初始化SSL KeyManager-不允许读取密钥库文件
Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "/etc/kibana/certs/ca.crt" "read") ElasticsearchException: failed to initialize SSL KeyManager - not permitted to read keystore file [/etc/elasticsearch/config/certs/elastic-stack-ca.p12]
解决方案:这里的错误本身很明显,请检查证书文件上的文件许可权,并且该文件应可由相应用户读取。
错误:Kibana服务器尚未准备好
Kibana server is not ready yet
说明:可能有很多可能的原因导致KIbana dasboard无法加载,并显示错误消息" Kibana服务器尚未准备好"。
基本上,这意味着Kibana服务存在一些错误,必须在访问仪表板之前进行纠正。
因此,我们必须检查在/var/log/messages中可用的Kibana服务日志。
解决方案:例如在Kibana服务器上尚未准备好,我在/var/log/messages中遇到了以下错误。
Elasticsearch Unreachable: [https://logstash_system:[email protected]:9200/][Manticore::SocketException] No route to host (Host unreachable)"}
当我的Elasticsearch集群不可访问时,Kibana仪表板无法加载,并显示错误" Kibana服务器尚未准备好"。
因此,一旦我的Elasticsearch群集启动,仪表板便启动并开始运行。