iLogtail 入门-采集Telegraf Metrics 数据

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
可观测监控 Prometheus 版,每月50GB免费额度
简介: # 前言阿里已经正式[开源](https://mp.weixin.qq.com/s/hcCYBZ0qvs8q4Wp1zFt-lg) 了可观测数据采集器iLogtail。作为阿里内部可观测数据采集的基础设施,iLogtail承载了阿里巴巴集团、蚂蚁的日志、监控、Trace、事件等多种可观测数据的采集工作。本文将介绍iLogtail如何与Telegraf协同工作,采集指标数据。# 采集配置iLogta

# 前言

阿里已经正式[开源](https://mp.weixin.qq.com/s/hcCYBZ0qvs8q4Wp1zFt-lg) 了可观测数据采集器iLogtail。作为阿里内部可观测数据采集的基础设施,iLogtail承载了阿里巴巴集团、蚂蚁的日志、监控、Trace、事件等多种可观测数据的采集工作。本文将介绍iLogtail如何与Telegraf协同工作,采集指标数据。

# 采集配置

iLogtail 目前采集配置全面兼容Telegraf [配置文件](https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md), iLogtail 在工作时将启动2个插件进行协同工作,分别为service_telegraf 插件与service_http_server 插件,service_telegraf 负责建立iLogtail 与Telegraf 进程之间的关联,将Telegraf Agent的配置管理工作交由iLogtail 控制,而service_http_server则负责iLogtail 插件与Telegraf Agent 之间的具体的数据传输工作。




1. service_telegraf 控制插件的具体参数配置:


   | 参数 | 描述 | 默认值 |

   | --- | --- | --- |

   | Detail | yaml格式的Telegraf采集配置 |  |


2. service_http_server 采集插件的具体参数配置:


  | 参数 | 描述 | 默认值 |

  | --- | --- | --- |

  | Format | 数据格式,对于Telegraf Agent,设置参数为influx。 |  |

  | Address | 监听地址 |  |

  | ReadTimeoutSec | 读取超时时间 | 10 |

  | ShutdownTimeoutSec | 关闭超时时间 | 5 |

  | MaxBodySize | 最大传输body 体大小 | 64 * 1024 * 1024 |

  | UnlinkUnixSock | 启动前如果监听地址为unix socket,是否进行强制释放 | true |


以下是一个简单的采集配置:

```

[

   {

       "detail":{

           "Detail":"\n# Read Redis's basic status information\n[[inputs.redis]]\n  interval = \"30s\"\n  ## specify servers via a url matching:\n  ##  [protocol://][:password]@address[:port]\n  ##  e.g.\n  ##    tcp://localhost:6379\n  ##    tcp://:password@192.168.99.100\n  ##\n  ## If no servers are specified, then localhost is used as the host.\n  ## If no port is specified, 6379 is used\n  ## servers = [\"tcp://host:port\"]\n  servers = [\"tcp://127.0.0.1:6379\"]\n  ## specify server password\n  # password = \"s#cr@t%\"\n  # password = \"\"\n\n  ## Optional TLS Config\n  # tls_ca = \"/etc/telegraf/ca.pem\"\n  # tls_cert = \"/etc/telegraf/cert.pem\"\n  # tls_key = \"/etc/telegraf/key.pem\"\n  ## Use TLS but skip chain & host verification\n  # insecure_skip_verify = true\n  [inputs.redis.tags]\n    __metricstore__ = \"ljp-test-bj_telegraf_test\"\n    cluster = \"test\"\n  \n    key = \"value\"\n  \n\n\n[[outputs.influxdb]]\n  ## The full HTTP or UDP URL for your InfluxDB instance.\n  ##\n  ## Multiple URLs can be specified for a single cluster, only ONE of the\n  ## urls will be written to each interval.\n  # urls = [\"unix:///var/run/influxdb.sock\"]\n  # urls = [\"udp://127.0.0.1:8089\"]\n  urls = [\"unix:///var/run/ljp-test-bj_telegraf_test.sock\"]\n  tagexclude = [\"__metricstore__\"]\n  skip_database_creation = true\n  [outputs.influxdb.tagpass]\n    __metricstore__ = [\"ljp-test-bj_telegraf_test\"]\n"

       },

       "type":"service_telegraf"

   },

   {

       "detail":{

           "Address":"unix:///var/run/ljp-test-bj_telegraf_test.sock",

           "Format":"influx"

       },

       "type":"service_http_server"

   }

]

```

# 采集数据格式

iLogtail Telegraf 采集的Metrics 数据与日志同样遵循[iLogtail 的传输层协议](https://github.com/alibaba/ilogtail/blob/main/pkg/protocol/proto/sls_logs.proto) ,目前传输数据字段为以下格式,与Prometheus 采集格式相同。


| 传输字段 | 含义 |

| --- | --- |

| __name__ | 指标名,与Prometheus exporter 指标名相同。 |

| __labels__ | 指标Label 熟悉,数据格式为{label_a_nane}#$#{label_a_value}|{label_b_nane}#$#{label_b_value},例如instance#$#exporter:18080|job#$#prometheus |

| __time_nano__ | 采集时间 |

| __value__ | 指标值 |


## 转换规则

Telegraf Agent 采集的数据规则格式为{type},{tags} {key&value pairs} {time}

```

mysql,host=Vm-Req-170328120400894271-tianchi113855.tc,server=rm-bp1eomqfte2vj91tkjo.mysql.rds.aliyuncs.com:3306 bytes_sent=19815071437i,com_assign_to_keycache=0i,com_alter_event=0i,com_alter_function=0i,com_alter_server=0i,com_alter_table=0i,aborted_clients=7738i,binlog_cache_use=136756i,binlog_stmt_cache_use=136759i,com_alter_procedure=0i,binlog_stmt_cache_disk_use=0i,bytes_received=6811387420i,com_alter_db_upgrade=0i,com_alter_instance=0i,aborted_connects=7139i,binlog_cache_disk_use=0i,com_admin_commands=3478164i,com_alter_db=0i,com_alter_tablespace=0i,com_alter_user=0i 1595818360000000000

```

iLogtail 会将接受到的Telegraf数据进行类Prometheus格式转换,转换规则为:


- __name__:{type}:{key}

- __labels__: {tags}

- __time_nano__:{time}

- __value__:{value}

# 本地采集Telegraf 采集Redis 指标数据实战


1. 准备Linux 环境。

1. [下载](https://github.com/alibaba/ilogtail/releases) 最新的ilogtail版本进行安装。

```shell

# 解压tar包

$ tar zxvf logtail-linux64.tar.gz


# 查看目录结构

$ ll logtail-linux64

drwxr-xr-x   3 500 500  4096 bin

drwxr-xr-x 184 500 500 12288 conf

-rw-r--r--   1 500 500   597 README

drwxr-xr-x   2 500 500  4096 resources


# 进入bin目录

$ cd logtail-linux64/bin

$ ll

-rwxr-xr-x 1 500 500 10052072 ilogtail_1.0.28 # ilogtail可执行文件

-rwxr-xr-x 1 500 500     4191 ilogtaild  

-rwxr-xr-x 1 500 500     5976 libPluginAdapter.so

-rw-r--r-- 1 500 500 89560656 libPluginBase.so

-rwxr-xr-x 1 500 500  2333024 LogtailInsight

```


3. 创建采集配置目录。

```

# 1. 创建sys_conf_dir

$ mkdir sys_conf_dir


# 2. 创建ilogtail_config.json并完成配置。

##### logtail_sys_conf_dir取值为:$pwd/sys_conf_dir/

##### config_server_address固定取值,保持不变。

$ pwd

/root/bin/logtail-linux64/bin
$ cat ilogtail_config.json
{
     "logtail_sys_conf_dir": "/root/bin/logtail-linux64/bin/sys_conf_dir/",  
     "config_server_address" : "http://logtail.cn-zhangjiakou.log.aliyuncs.com"
}


# 3. 此时的目录结构

$ ll

-rwxr-xr-x 1  500  500 ilogtail_1.0.28

-rw-r--r-- 1 root root ilogtail_config.json

-rwxr-xr-x 1  500  500 ilogtaild

-rwxr-xr-x 1  500  500 libPluginAdapter.so

-rw-r--r-- 1  500  500 libPluginBase.so

-rwxr-xr-x 1  500  500 LogtailInsight

drwxr-xr-x 2 root root sys_conf_dir

```


5. 设置采集配置文件,将下列内如写入sys_conf_dir/user_local_config.json文件,下面核心配置为plugin部分,核心部分为plugin部分,此部分描述的内容主要是下发Telegraf 采集配置,将收集到的Telegraf 数据写于本地telegraf.log

```

{

   "metrics":{

       "test-telegraf":{

           "aliuid":"",

           "category":"",

           "create_time":1640692891,

           "defaultEndpoint":"",

           "delay_alarm_bytes":0,

           "enable":true,

           "enable_tag":false,

           "filter_keys":[


           ],

           "filter_regs":[


           ],

           "group_topic":"",

           "local_storage":true,

           "log_type":"plugin",

           "log_tz":"",

           "max_send_rate":-1,

           "merge_type":"topic",

           "plugin":{

               "inputs":[

                   {

                       "detail":{

                           "Detail":"\n# Read Redis's basic status information\n[[inputs.redis]]\n  interval = \"30s\"\n  ## specify servers via a url matching:\n  ##  [protocol://][:password]@address[:port]\n  ##  e.g.\n  ##    tcp://localhost:6379\n  ##    tcp://:password@192.168.99.100\n  ##\n  ## If no servers are specified, then localhost is used as the host.\n  ## If no port is specified, 6379 is used\n  ## servers = [\"tcp://host:port\"]\n  servers = [\"tcp://127.0.0.1:6379\"]\n  ## specify server password\n  # password = \"s#cr@t%\"\n  # password = \"\"\n\n  ## Optional TLS Config\n  # tls_ca = \"/etc/telegraf/ca.pem\"\n  # tls_cert = \"/etc/telegraf/cert.pem\"\n  # tls_key = \"/etc/telegraf/key.pem\"\n  ## Use TLS but skip chain & host verification\n  # insecure_skip_verify = true\n  [inputs.redis.tags]\n    __metricstore__ = \"ljp-test-bj_telegraf_test\"\n    cluster = \"test\"\n  \n    key = \"value\"\n  \n\n\n[[outputs.influxdb]]\n  ## The full HTTP or UDP URL for your InfluxDB instance.\n  ##\n  ## Multiple URLs can be specified for a single cluster, only ONE of the\n  ## urls will be written to each interval.\n  # urls = [\"unix:///var/run/influxdb.sock\"]\n  # urls = [\"udp://127.0.0.1:8089\"]\n  urls = [\"unix:///var/run/ljp-test-bj_telegraf_test.sock\"]\n  tagexclude = [\"__metricstore__\"]\n  skip_database_creation = true\n  [outputs.influxdb.tagpass]\n    __metricstore__ = [\"ljp-test-bj_telegraf_test\"]\n"

                       },

                       "type":"service_telegraf"

                   },

                   {

                       "detail":{

                           "Address":"unix:///var/run/ljp-test-bj_telegraf_test.sock",

                           "Format":"influx"

                       },

                       "type":"service_http_server"

                   }

               ],

               "flushers":[

                   {

                       "detail":{

                           "FileName":"./telegraf.log"

                       },

                       "type":"flusher_stdout"

                   }

               ]

           },

           "priority":0,

           "project_name":"",

           "raw_log":false,

           "region":"",

           "send_rate_expire":0,

           "sensitive_keys":[


           ],

           "shard_hash_key":[


           ],

           "tz_adjust":false,

           "version":1

       }

   }

}

```


6. 设置Telegraf

```

cd sys_conf_dir

# 下载Telegraf

wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/linux64/telegraf/1.0.29/telegraf.tar.gz


$tar -xvf telegraf.tar.gz

telegraf/

telegraf/version

telegraf/javaagent/

telegraf/javaagent/jolokia-jvm.jar

telegraf/telegrafd

telegraf/arch_type

telegraf/conf.d/

telegraf/telegraf


chmod 755 telegraf/telegrafd

```


7. 启动redis 容器,并暴露6379端口。

```

docker pull redis

docker run -p 6379:6379 -d redis:latest redis-server

```


8. 启动logtail ,可以看到Telegraf 数据以及保存于telegraf.log 文件。

```

sudo ./ilogtail_1.0.29 --ilogtail_daemon_flag=false


2022-02-21 23:46:35 {"__name__":"redis:instantaneous_output_kbps","__labels__":"cluster#$#test|host#$#sls-backend-server-test011122076082.na131|key#$#value|port#$#6379|replication_role#$#master|server#$#127.0.0.1","__time_nano__":"1645458390000000000","__value__":"0","__time__":"1645458390"}

2022-02-21 23:46:35 {"__name__":"redis:sync_full","__labels__":"cluster#$#test|host#$#sls-backend-server-test011122076082.na131|key#$#value|port#$#6379|replication_role#$#master|server#$#127.0.0.1","__time_nano__":"1645458390000000000","__value__":"0","__time__":"1645458390"}

2022-02-21 23:46:35 {"__name__":"redis:mem_clients_slaves","__labels__":"cluster#$#test|host#$#sls-backend-server-test011122076082.na131|key#$#value|port#$#6379|replication_role#$#master|server#$#127.0.0.1","__time_nano__":"1645458390000000000","__value__":"0","__time__":"1645458390"}

2022-02-21 23:46:35 {"__name__":"redis:client_recent_max_output_buffer","__labels__":"cluster#$#test|host#$#sls-backend-server-test011122076082.na131|key#$#value|port#$#6379|replication_role#$#master|server#$#127.0.0.1","__time_nano__":"1645458390000000000","__value__":"0","__time__":"1645458390"}

```

# 日志服务采集Redis 指标数据实战


1. 参考[主机环境日志采集到SLS](https://github.com/alibaba/ilogtail/blob/main/docs/zh/usecases/How-to-setup-on-host.md) 建立主机iLogtail与阿里云日志服务的链接。

1. 创建MetricStore


![image.png](https://cdn.nlark.com/yuque/0/2022/png/22279413/1645543648105-dd8004c3-f0f2-4f3c-a922-fc7376bfb32c.png#clientId=ud1ed2f8e-0c3c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=901&id=u00e79867&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1802&originWidth=3582&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1331965&status=done&style=none&taskId=u6bca1828-316a-44bf-8d79-94ec91483a6&title=&width=1791)


3. 在**创建机器组**页签中,创建机器组,然后在**机器组配置**页签中,应用机器组。选择一个机器组,将该机器组从**源机器组**移动到**应用机器组**。

3. 创建redis 采集配置,选择Redis监控。


![image.png](https://cdn.nlark.com/yuque/0/2022/png/22279413/1645543646377-23d0cdc0-c42b-4205-b91c-a2f8bdbb6879.png#clientId=ud1ed2f8e-0c3c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=840&id=u376e9200&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1680&originWidth=3582&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1169149&status=done&style=none&taskId=u1cfd528e-f97a-42b5-b78c-020e8e5d919&title=&width=1791)


5. 配置Redis监控采集配置。




![image.png](https://cdn.nlark.com/yuque/0/2022/png/22279413/1645543645507-6d15ae85-bafe-4df0-aa88-d9838f881daf.png#clientId=ud1ed2f8e-0c3c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=786&id=u59ab1441&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1572&originWidth=2758&originalType=binary&ratio=1&rotation=0&showTitle=false&size=383606&status=done&style=none&taskId=u4f2d28e4-09b0-43e8-aef6-cd942a775f0&title=&width=1379)


4. 当采集配置成功后,此时可以打开可视化看板,查看展示redis 数据展示。


![image.png](https://cdn.nlark.com/yuque/0/2022/png/22279413/1645543648098-476ea724-8fb0-4e7b-aa06-96ec6182b58c.png#clientId=ud1ed2f8e-0c3c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=747&id=ud075cad9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1494&originWidth=2974&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1090286&status=done&style=none&taskId=u3313b0bb-f694-4c77-badb-6998f854f2c&title=&width=1487)

# 总结

iLogtail 提供了完整的Telegraf 数据收集能力,无需改造迁移,即可将Telegraf采集转换为iLogtail 采集。而通过日志服务的MetricStore能力,构建了标准的PromQL Metrics 查询解决方案,让用户无需在多种Metrics 指标查询中选择。

# 参考文档

- [Telegraf 配置文档](https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md)

- [接入Redis数据](https://help.aliyun.com/document_detail/185092.html)

- [iLogtail 的传输层协议](https://github.com/alibaba/ilogtail/blob/main/pkg/protocol/proto/sls_logs.proto)

- [主机环境日志采集到SLS](https://github.com/alibaba/ilogtail/blob/main/docs/zh/usecases/How-to-setup-on-host.md)

#



相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
消息中间件 监控 NoSQL
|
Prometheus Cloud Native API
|
3月前
|
消息中间件 Prometheus 监控
使用jmx exporter采集kafka指标
使用jmx exporter采集kafka指标
157 4
|
2月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
288 0
|
4月前
|
存储 数据采集 监控
Telegraf 使用小结
Telegraf 使用小结
64 1
|
3月前
|
数据采集 监控 Unix
性能监控之Telegraf+InfluxDB+Grafana实现结构化日志实时监控
【8月更文挑战第1天】性能监控之Telegraf+InfluxDB+Grafana实现结构化日志实时监控
328 0
|
6月前
|
监控 数据可视化 关系型数据库
MetricBeat + Elasticsearch + Kibana 实现监控指标可视化
MetricBeat + Elasticsearch + Kibana 实现监控指标可视化
235 0
|
6月前
|
数据采集 存储 监控
InfluxDB与Telegraf:数据采集与监控实战
【4月更文挑战第30天】本文介绍了InfluxDB和Telegraf在数据采集与监控中的应用。InfluxDB是高性能的时序数据库,适合高吞吐量和实时查询,而Telegraf是数据采集代理,能收集多种系统指标并发送至InfluxDB。实战部分涉及安装配置两者,通过Telegraf收集数据,然后使用InfluxDB查询分析,配合Grafana实现可视化展示,从而实现有效的监控解决方案。
|
消息中间件 数据可视化 JavaScript
日志可视化方案:ELK+filebeat
日志可视化方案:ELK+filebeat
|
Kubernetes 容器 Perl
使用Logstash收集Kubernetes的应用日志
前言 本文同步更新到Github仓库kubernetes-handbook中。 很多企业内部都有自己的ElasticSearch集群,我们没有必要在kubernetes集群内部再部署一个,而且这样还难于管理,因此我们考虑在容器里部署logstash收集日志到已有的ElasticSearch集群中。
2994 0