Observability:集群监控 (二) – Elastic Stack 8.x
2022年11月10日 | by mebius
这是之前的文章 “Observability:集群监控 (一) – Elastic Stack 8.x” 的续篇。在上一篇文章中,我详细地介绍了如何使用传统的收集器来监控 Elastic Stack。这个是不被推荐的方法。在 Elastic Stack 7.16 推出以后,更为推荐的方法是使用 Metricbeat 来监控 Elastic Stack。在今天的文章中,我将详细地介绍如何使用一个监控 Elasticsearch 集群来监控一个生产环境的集群。
如上所示,我们使用一个专有的 Elasticsearch 集群来作为监控集群来监控其它的 Elastic Stack 组件。这个方案的好处是,只要监控集群是正常运行的,它独立于其它的处于生产环境中的 Elastic Stack 组件。它不会影响它们的整体表现。在生产环境中的 Elasticsearch 集群宕机了,那么我们也可以照样采集到当时的数据以更进一步地分析问题。
在今天的文章中,我将使用如下的架构以方便阅读:
如上所示,在我的 macOS 机器上安装有一个监控机器,而在 Ubuntu OS 上安装的是一个被监控的集群。我将采用最新的 Elastic Stack 8.4.3 来进行展示。
安装
如果你已经安装好了 Elasticsearch 及 Kibana,并曾经使用过传统收集器来监控 Elasticsearch 集群的话,那么你可以在界面直接进行修改,并开始部署。你可以参考之前的的文章 Observability:集群监控 (一) – Elastic Stack 8.x并点击如下的地方开始:
我们点击上面的 Monitor with Metricbeat 按钮:
然后按照上面的提示一直做下去直到我们完成所有的操作步骤,并退出 setup mode。今天在这里就不再展示了。在下面,我们从完全部署好的两个崭新的集群开来进行展示。
我们可以安装我之前的文章:
分别在 macOS 及 Ubuntu OS 上部署两个 Elasticsearch 集群。在 macOS 上的集群被用作监控集群,而在 Ubuntu OS 上的 Elasticsearch 被用作生产环境的集群。我们需要在 Ubuntu OS 上部署 Metricbeat 来监控在这个机器上的 Elasticsearch 集群。按照我们之前的要求,我们需要安装 Elastic Stack 8.x。在默认的配置中,Elasticsearch 的访问是 HTTPS 连接的。
为了能够得我们的 Kibana 可以被其它的机器所访问,我们可以对 config/kibana.yml 文件做如下的修改:
config/kibana.yml
server.host: "0.0.0.0"
启动收集监控数据
我们在生产集群中,也就是 Ubuntu OS 所在的 Elasticsearch 里,设置xpack.monitoring.collection.enabled 为 true。在默认的情况下这个是 false。我们可以在 elasticsearch.yml 中进行设置,也可以在 Kibana 中使用如下的命令来进行设置:
PUT _cluster/settings
{
"persistent": {
"xpack.monitoring.collection.enabled": true
}
}
如果启用了 Elasticsearch 安全功能,你必须具有监控集群权限才能查看集群设置并管理集群权限才能更改它们。
安装 Metricbeat
安装 Metricbeat 的步骤非常简单直接。我们可以参考在文章 “Beats:Beats 入门教程 (二)” 中的步骤来进行安装。我们也可以参考 Elastic 的官方文档来进行安装Metricbeat quick start: instaltgcodelation and configuration | Metricbeat Reference [8.4] | Elastic。我们必须启动 elasticsearch 模块:
./metricbeat modules enable elasticsearch-xpack
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ pwd
/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ ./metricbeat modules enable elasticsearch-xpack
Enabled elasticsearch-xpack
我们可以使用如下的命令来进行查看:
./metricbeat modules list
如上所示,在默认的情况下,system 模块是启动的。在我们的练习中,我们可以禁止这个模块,如果你不需要 system 指标。
我们接下来配置 Metricbeat。我们需要把 macOS 的 Elasticsearch 的证书拷贝到 Ubuntu OS 中,因为这个证书是需要来配置 Elasticsearch 的 output 的。
$ pwd
/Users/liuxg/elastic/elasticsearch-8.4.3
$ cd config/certs/
$ ls
http.p12 http_ca.crt transport.p12
$ scp http_ca.crt parallels@parallels:/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
http_ca.crt 100% 1915 3.3MB/s 00:00
这样我们在 Ubuntu OS 的机器里可以看到这个被拷贝来的证书:
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ pwd
/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ ls http_ca.crt
http_ca.crt
我们接下来修改 metricbeat.yml 配置文件:
metricbeat.yml
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.0.3:9200"]
# Protocol - either `http` (default) or `https`.
protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
username: "elastic"
password: "dh4ePmn4gIHvj*BwEUt+"
ssl.certificate_authorities: ["http_ca.crt"]
我们把上面的这个部分需要根据自己的配置进行修改。另外值得指出的是,你在实践中,建议不使用 elastic 这个超级用户来配置。另外,如果你不喜欢把密码放置于这个文件中,你可以参考文章 “Beats:Beats 入门教程 (二)” 把密码置于keystore 中。另外,我们也可以针对 Kibana 做如下的配置:
setup.kibana:
# Kibana Host
# Scheme and port can be left out and will be set to the default (http and 5601)
# In case you specify and additional path, the scheme is required: http://localhost:5601/path
# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
host: "192.168.0.3:5601"
# Kibana Space ID
# ID of the Kibana Space into which the dashboards should be loaded. By default,
# the Default Space will be used.
#space.id:
我们保存好 metricbeat.yml 文件。然后我们可以使用如下的命令来测试:
./metricbeat test output
上面的输出表明我们的 Elasticsearch output 及 Kibana 的配置是没有任何问题的。
我们接下来测试一下 elasticsearch-xpack 模块:
./metricbeat test modules elasticsearch-xpack
它不显示任何数据。为了能够让 Metricbeat 采集被监控的 Elasticsearch 集群,我们需要针对 elasticsearch-xpack 模块进行配置。在 Ubuntu OS 集群上打入如下的命令:
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ pwd
/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ vi modules.d/elasticsearch-xpack.yml
# Module: elasticsearch
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/8.4/metricbeat-module-elasticsearch.html
- module: elasticsearch
xpack.enabled: true
period: 10s
hosts: ["https://localhost:9200"]
username: "elastic"
password: "dMH23uZTrutgcodexy2zYq087_"
ssl.certificate_authorities: ["/home/parallels/elastic/elasticsearch-8.4.3/config/certs/http_ca.crt"]
在这里必须指出的是:我们不建议在生产环境中使用 elastic 这个超级用户来进行配置。你可以创建有监控权限的用户。关于如何创建用户,请参阅文章 “Elasticsearch:用户安全设置”。
在启动 Metricbeat 之前,我们先查看一下 macOS 上的 Kibana 用户界面:
很显然,它没有任何的监控数据。我们接下来在 Ubuntu OS 的 terminal 中打入如下的命令:
./metricbeat -e
稍等一小会儿,我们再次回到 macOS 中的 Kibana 监控界面:
这个时候,由于有监控数据,界面自动显示到上面看到的画面。我们可以查看到 Elasticsearch 的状态。 如上所示,它显示有 13 个索引。我们可以在 Ubuntu OS 上的 Kibana 创建一个如下的索引:
PUT twitter/_doc/1
{
"content": "This is Xiaoguo from Elastic"
}
我们再次回到监控页面:
很显然,上面的索引数值变为 14 了,也就是增加一tgcode个了。点击上面的链接:
我们可以看到新增加的 twitter 索引。
好了,在这篇文章中,我展示了如何使用 Metricbeat 来监控 Elasticsearch 集群。如果你想了解如何监控其它的组件,比如 Kibana,Metricbeat 及 Logstash,请更进一不阅读我在文章 “Elastic:开发者上手指南” 中的 “监视及管理” 章节。
文章来源于互联网:Observability:集群监控 (二) – Elastic Stack 8.x
相关推荐: Elasticsearch:Top metrics 聚合
top_metrics 聚合从文档中选择具有最大或最小排序值的 metrics。 例如,这会获取tgcode文档中 s 字段的最大值所对应的m 字段的值: POST /test/_bulk?refresh {“index”:{}} {“s”:1,”m”:3.1…