创建一个Prometheus的exporter来监控Nifcloud RDB

这篇文章是富士通云技术2017年圣诞日历的第四天。

昨天是 @riow 的“误解回家早了,所以考虑了再发防止措施”的事情。对于再发防止措施,并不只是通过说“下次要注意”这种方式,而是通过编写脚本来应对,这种想法真是太棒了。顺便说一下,我们公司有弹性工作制,所以即使提早下班也没关系。

首先

我平时负责管理着一些诸如Nifcloud RDB等的主机,并在工作中进行管理。当我需要管理的主机数量增多时,如何对它们进行监控一直都是一个令人头疼的问题。

近期,关于Prometheus作为监控基础设施的讨论机会逐渐增多。最近,Prometheus 2.0也刚刚发布了。

作为Prometheus的一个有用功能之一,我们有一个名为exporter的机制。exporter可以使用现有的组件,也可以自己创建一个用于获取任意指标的机制。本次我们将创建自己的Prometheus exporter,并将日本云RDB的指标与Prometheus进行整合。

在Nifcloud RDB上原本就有监控功能,即使什么都不做只需打开控制面板,也可以轻松查看指标。但是,这次我们故意尝试创建了一个同时学习Prometheus exporter的机会。例如,如果已经有Prometheus环境,并且希望在同一环境中监视Nifcloud RDB,这将非常有用。

在创建Prometheus exporter时

在创建出口商时,建议阅读官方的”编写出口商”。此外,参考已经实现的其他出口商列表也是一个好方法。尤其是位于Prometheus GitHub组织下的官方出口商实现非常有参考价值。我们还参考了”编写了resque_exporter(我对此很熟悉)”。

只要创建一个返回Prometheus可以解释的特定响应的Web服务器,导出器的实现本身灵活度很高。没有限定语言。目前,除了官方文档之外,找不到其他汇总信息,所以可能需要阅读源代码并且可能对实现方法感到困惑。此外,虽然没有语言限制,但基本上使用官方的prometheus/client_golang库并在golang中实现是最简单的。

我创建了nifcloud_exporter。

所以,我做了一个名为nifcloud_exporter的exporter,专为NIFCLOUD而设计。它的功能是使用golang调用NIFCLOUD API,并将获取的指标作为exporter返回。在实现过程中,我还参考了其他实现方式相似的API获取指标的exporter实现,如percona/rds_exporter等。

使用方法

首先,准备以下的 config.yml。这是 nifcloud_exporter 所需的用于调用 NIFCLOUD API 的信息。

---

rdb:
  - name: <適当な環境名。例えばstagingとか>
    region: <リージョン>
    accessKeyId: <YOUR ACCESS KEY>
    secretAccessKey: <YOUR SECRET ACCESS KEY>
    instances:
      - name: <監視したいDBサーバ名>

使用上述的 config.yml 文件来指定,并启动 nifcloud_exporter。

./nifcloud_exporter --config.file=<config.ymlのパス>

默认情况下,使用的是9042端口。(也可以进行更改)

此外,还可以使用Docker进行启动。

$ docker pull heriet/nifcloud_exporter:latest
$ docker run -d -p 9042:9042 -v <config.ymlのパス>:/etc/nifcloud_exporter/config.yml --name nifcloud_exporter heriet/nifcloud_exporter

如果使用docker-compose的话,可能会是以下这样

version: '3'
services:
  nifcloud_exporter:
    image: heriet/nifcloud_exporter
    container_name: nifcloud_exporter
    ports:
      - 9042:9042
    volumes:
      - <config.ymlのパス>:/etc/nifcloud_exporter/config.yml

只需要让Prometheus识别nifcloud_exporter。在Prometheus的配置中,您只需在prometheus.yml的scrape_configs中添加类似以下的配置。与其他exporter没有太大不同。scrape_interval设置得稍微长一些。

scrape_configs:
  - job_name: 'nifcloud_exporter'
    scrape_interval: 5m
    static_configs:
      - targets:
        - '<nifcloud_exporterが起動しているホスト>:<nifcloud_exporterが動作するポート>'

在设置完成后,检查 Prometheus,可以确实发现指标以 nifcoud_~ 的名称被集成。下面是与 Prometheus 集成的 Grafana 页面。

nifcloud_exporter.png

只要能够连接到指标,我们就可以使用Prometheus的方式进行可视化和警报监控。

概述

由于使用了Prometheus的官方库,Nifcloud_exporter的实现相对简单。目前只支持Nifcloud RDB的指标,但是通过类似的方式可以调用Nifcloud的其他服务API,并将其与Prometheus进行集成。如果您找不到合适的exporter,我推荐大家尝试自己制作Prometheus exporter。

明天听说 @kentac55 将会写关于“在Windows10 Pro中体验嵌套式Hyper-V”的话题。很期待!

广告
将在 10 秒后关闭
bannerAds