# 利用 Telegraf 进行简单的系统监控

InfluxData 除了广为人知的 InfluxDB 之外，还有几个其他的产品，合称 TICK：

- Telegraf：数据采集
- InfluxDB：数据存储
- Chronograf：数据展现
- Kapacitor：数据分析、告警

在翻看 InfluxDB 的时候偶然发现了这个东西，虽然 Tick 四兄弟捆起来也不够看，不过 Telegraf 足够小巧，而且自动化的可能性更大，更符合目前的做事风格，所以就学习一下。

> 官宣： The plugin-driven server agent for collecting & reporting metrics.

所以 Telegraf 主要是一个框架，由数据输入、处理、输出三大类插件完成各种功能。Github 的 README.md 中列出了主要插件：`https://github.com/influxdata/telegraf`。总的来说还是比较丰富的，下面的操作将利用简单的输入插件结合 InfluxDB 输出插件完成一个初步的指标收集过程。

## 安装

### CentOS

生成如下的 repo 文件：

    [influxdb]
    name = InfluxDB Repository - RHEL $releasever
    baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
    enabled = 1
    gpgcheck = 0

`yum install -y telegraf` 即可完成安装。

### Docker

`docker pull telegraf`

## 配置

yum 安装后在 `/etc/telegraf` 下会生成一个 `telegraf.conf` 文件。

> 配置文件中可以使用 "$ENV_ITEM" 的形式使用环境变量。

### global_tags

这里记录的内容将作为 Tags 保存到 InfluxDB 的每个 Item 中。

### agent

这一节内容是数据搜集服务的行为定义。这里暂时无需进行改动

### outputs.influxdb

这里用于定义写入的 InfluxDB。

~~~ini
urls = ["http://localhost:8086"]
database = "telegraf"
timeout = "5s"
username = "telegraf"
password = "abcde!@#$%"
~~~

urls 参数是一个数组，代表一个集群，如果其中包含多个服务，则每次只会选择其中一台进行写入。

而在 inputs 一节中，缺省启用了很多系统属性，例如磁盘，网络等，这里我们添加一点 http 监控内容：

~~~ini
[[inputs.http_response]]
address = "http://163.com"
response_timeout = "5s"
method = "GET"

[[inputs.http_response]]
address = "http://sina.com.cn"
response_timeout = "5s"
method = "GET"
~~~

> 小窍门：可以用 `telegraf -config telegraf.conf -input-filter http_response -test` 命令，来检查配置的正确性。

配置文件编写完成之后，就可以利用 `systemctl start telegraf`，启动 telegraf 服务了。

启动之后，Telegraf 会在一定的时间间隔里向 InfluxDB 汇报数据。我们可以在 InfluxDB UI 中利用

~~~sql
select * from cpu
~~~

这样的语句来查询数据，或者接入 Grafana 等进行展现。
