0x0 前言

最近这几天研究了一下ElasticSearch相关的技术栈。前面一篇转发了别人些的非常详细的ElasticSearchKibana搭建的过程。发现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里配的端口一致。

  然后把这个程序运行起来

0x5 效果图

  回到Kibana,进入Dashboard页,里面增加了一个Server Info的项,点进去看到如下效果就成了

0x6 区分多个golang应用程序

  在步骤2里就要填metricbeat.yml里的name那个字段:server-1,当你开了多个metricbeat时就可以用不通的名字过滤。然后把这个模板clone一份再保存