自Elastic 7.5发布开始,通过外部监控Elastic Stack已经全面实施。 可以通过Metricbeat模块监视Elasticsearch,Kibana,Logstash,APM服务器和Beats。
使用外部收集,用户现在可以收集和发送其Elastic Stack的监视数据,而不必依赖于受监视服务的运行状况。 此版本大大提高了用于监视Elastic Stack可靠性和选则的灵活性。 对于Elastic Stack监视的所有用户,建议使用外部数据收集。
一点背景
以前,Elastic Stack中的服务收集并传送了自己的监视数据,该进程称为内部收集进程(internal collection)。
通过引入外部收集,用户可以与各种受监视的服务(例如Elasticsearch)一起运行Metricbeat,以收集有关其运行状况和性能的监视数据并将其直接传送到监视集群。
过去,Stack Monitoring要求先将所有监视数据发送到生产集群,然后再将其转发到监视集群。 这种的设计不是我们所期望的,比如当我们的生产机器收到胁迫时,监视功能也有可能不能正常工作。
过去的设置要求通过生产集群路由监视数据
通过引入Metricbeat作为收集和运输监视数据的代理,不再需要通过生产集群路由监视数据。 现在可以由独立的轻量级监视代理程序收集监视数据,并将其直接发送到监视集群。
使用Metricbeat进行监视,可将所有数据直接路由到监视群集,而完全无需接触生产群集
动手实践
安装Elasticsearch及Kibana
在今天的练习中,我们将使用两个不同的集群来完成我们的练习:
我们把两个集群都部署在我们的同一个机器上,但是它们都分别位于不同的目录中。如果你还没有安装好自己的集群,那么请参阅我之前的文章“Elastic:菜鸟上手指南”来进行安装。请注意:我们通过解压安装包的办法来进行安装,并分别在两个不同的目录中进行安装。我们需要按照我上面的配置要求分别配置在Elasticsearch中的config/elasticsearch.yml及Kibana中的config/kibana.yml文件。另外为了能够满足监控的要求,我们必须对这两个集群分别配置安全账号。请参阅文章“Elasticsearch:设置Elastic账户安全”。
通过这样的配置后,我们可以得到两个集群:
如果你能看到上面的两个Kibana的界面,则表明我们的配置已经成功。
在上面的配置中,端口为9200的集群是我们的生产集群。为了能对它的数据进行监控,我们必须对它进行配置。我们打开端口为5601的Kibana:
PUT _cluster/settings
{
"persistent": {
"xpack.monitoring.collection.enabled": true
}
}
上面的指令启用监视数据收集。
我们可以通过如下的指令来检查修改后的结果:
GET _cluster/settings
我们也同时禁用生产集群默认的Elasticsearch指标监控:
PUT _cluster/settings
{
"persistent": {
"xpack.monitoring.elasticsearch.collection.enabled": false
}
}
经过上面的修改,我们的配置结果是:
安装Metricbeat
为了能够实现对Elasticsearch的外部监控,我们必须安装Metricbeat。我们打开上面的任何一个Kibana界面:
点击Add metric data按钮:
点击上面的System metrics:
我们选择我们电脑相匹配的操作系统。在上面我们可以看到相应安装Metricbeat的指令。通过这样的方法,我们可以安装好和我们的Elasticsearch相匹配的Metricbeat的版本。我们可以先不要按照上面的指令来启动system模块,尽管system模块在默认的情况下已经被启动。我们可以通过如下的指令来查看所有已经启动的模块:
./metricbeat modules list
在上面我们可以看到elasticsearch-xpack模块已经被成功地启动了。我们可以通过如下的指令来启动:
./metricbeat modules enable elasticsearch-xpack
如果你的system模块已经被启动,你可以通过如下的方式来禁止这个模块:
./metricbeat modules disable system
为了能够使得我们监控生产集群(127.0.0.1:9200),我们必须把数据数据采集并发送到监控集群(127.0.0.1:9201),我们必须配置位于modules.d目录下的elasticsearch-xpack.yml文件
$ pwd
/Users/liuxg/elastic8/metricbeat-7.6.0-darwin-x86_64
liuxg:metricbeat-7.6.0-darwin-x86_64 liuxg$ ls modules.d/elasticsearch-xpack.yml
modules.d/elasticsearch-xpack.yml
根据我们的要求,我做了如下的配置:
# Module: elasticsearch
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/7.6/metricbeat-module-elasticsearch.html
- module: elasticsearch
metricsets:
- ccr
- cluster_stats
- enrich
- index
- index_recovery
- index_summary
- ml_job
- node_stats
- shard
period: 10s
hosts: ["http://localhost:9200"]
username: "elastic"
password: "123456"
xpack.enabled: true
在上面的配置中,它每隔10秒收集位于http://localhost:9200的集群的数据。在上面,我采用了elastic这个超级用户,同时你也需要根据自己的密码进行修改。
为了能把数据传入到http://localhost:9201,我们也需要对metricbeat.yml进行配置:
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9201"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
username: "elastic"
password: "123456"
在上面我们把hosts配置为localhost:9201,也就是收集的数据需要传入到这个集群里去。我们也需要根据我们自己的配置,修改上面的用户名及密码。
经过上面的配置后,我们的metricbeat的配置已经完成,我们可以通过如下的命令来启动metricbeat:
./metricbeat -e
监控Elasticsearch
接下来,我们打开监控集群的Kibana界面http://localhost:5602:
我们打开Stack Monitoring应用。在上面我们可以看到被监控的生产环境的端口地址为9200的集群。在上面显示有一个nodes及8个索引。点击上面的Overview:
点击上面的nodes:
它显示我们当前的生产集群的node的总览情况。点击上面的liuxg超链接:
我们可以看到这个node的内存,IO,CPU等统计情况。点击上面的Advanced:
点击应用入口的Indices:
我们可以看到所有的索引的状态。
总结
在今天的文章中,我们展示了如何使用metricbeat来对Elasticsearch进行外部的监控。我们可以使用同样的方法来对其它的Elastic Stack进行监控:
-
Metricbeat logstash-xpack 模块监控logstash
-
Metricbeat beat-xpack 模块监控beats
-
Metricbeat kibana-xpack 模块监控Kibana
剩下的练习就留给你们来研究了。
参考:
【2】https://www.elastic.co/guide/en/elasticsearch/reference/7.6/configuring-metricbeat.html