最近这几天研究了一下ElasticSearch相关的技术栈。前面一篇转发了别人些的非常详细的ElasticSearch和Kibana搭建的过程。发现Elastic家族还有Metricbeat这个神器,今天我们把前面搭建的和这个工具一起利用起来。
0x1 需求
需求是这样:我有很多个Golang写的应用程序,每程序连接一个Redis数据库,每个程序开在一台物理机上。我需要把每个golang应用每个Redis数据库和每个所在的物理机监控起来。
0x2 启动Metricbeat
1. 下载Metricbeat https://www.elastic.co/downloads/beats/metricbeat,注意和前面ElasticSearch和Kibana版本匹配,我用的全是6.8.0的版本。
2. 修改配置
1)修改根目录下metricbeat.yml配置。主要是general里的name和Elasticsearch output里的hosts,以及Kibana里的host。general的name自己取一个特征名字就行,这个步骤很关键,为后面能区分不同的服务器的数据用。
2)修改modules.d下module配置
i. 复制一份golang.yml.disable改名成golang.yml。修改配置如下
ii. 复制一份redis.yml.disabled改名成redis.yml。修改配置如下
3. 给ElasticSearch和Kibana导入index的mapping和dashboard。
./metricbeat setup
如果前面的ElasticSearch和Kibana的配置不对这步会报错
4. 启动Metricbeat ./metricbeat -e -v -c ./metricbeat.yml
0x3 配置Kibana
导入我这个dashboard展示数据(UI是我调的,可以根据自己需求调整)。
1. 把下面这个保存成一个文件名命export.json。
2. 导入Kibana。
0x4 给golang程序增加监控代码
这个比较简单直接在main.go的import里加入 _ "expvar",然后开启http服务器就行了http.ListenAndServe。注意这个端口要和上面golang.yml里配的端口6060一致。
然后把这个程序运行起来
0x5 效果图
回到Kibana,进入Dashboard页,里面增加了一个Server Info的项,点进去看到如下效果就成了
0x6 区分多个golang应用程序
在步骤2里就要填metricbeat.yml里的name那个字段:server-1,当你开了多个metricbeat时就可以用不通的名字过滤。然后把这个模板clone一份再保存