searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

telegraf监控方式调研

2023-10-08 03:04:44
183
0

Telegraf 可以直接从运行的系统中获取各种指标,以及从第三方 API 中提取指标,然后将指标保存至prometheus,通过grafana观测系统运行情况,调研了四种telegraf监控nginx的方案。

方案1,使用脚本

Telegraf部署目录/opt/app/telegraf/scripts,只需将脚本放在这里,telegraf 60s调用一次脚本。

ELB当前已经有monitor监控,后续新增指标不用修改monitor,只需修改telegraf目录下的脚本即可。

telegraf配置如下

[[inputs.exec]]

  commands = [

      "/opt/app/telegraf/scripts/collect_*"

  ]

 data_format = "influx"

脚本输出参考格式

[root@js10-az1-region-gateway-11e8e0e20 tmp]# ./collect_l7xgw_detail_stat.py

l7xgw,tag=lb-kaye0jh20g@listener-eew1g7wvw5@10.28.6.66 conn=867899

l7xgw,tag=lb-kaye0jh20g@listener-eew1g7wvw5@10.28.6.66 ms=235129598

l7xgw,tag=lb-h4kl25niba@listener-9rj7xastto@192.168.0.15 conn=111

l7xgw,tag=lb-h4kl25niba@listener-9rj7xastto@192.168.0.15 ms=153

这样prometheus的指标为l7xgw_conn,tag可以多个,可以表示不同的listener或者不同的upstream

计算请求耗时语句为increase(l7xgw_ms)/increase(l7xgw_conn),展示结果为

 

方案2,使用nginx内存数据

telegraf监控nginx,github上新版本已经支持nginx的不同模块作为输入

插件nginx使用的是nginx_http_stub_status_module,字段较少

插件nginx_vts模块,l7xgw编译了该模块,monitor计算qps数据就是从该模块采集。

主要数据为链接数据

以及不同维度(filter,server,upstream,shared)的业务数据

测试验证:测试环境可以通过telegraf的配置

[[inputs.nginx_vts]]

  urls = ["XXX/stats"]

[[outputs.http]]

  url = "XXX/prometheus/api/v1/write"

  data_format="prometheusremotewrite"

上传到Prometheus,查看对应的指标,总共390个数据较全。

使用测试环境grafana,并且1qps压测,每个请求耗时1s,grafana展示如图。

 

方案3,使用nginx日志

telegraf支持inputs.tail的方式,日志按照grok的语法进行分割。grok可以理解成写好的正则表达式,参考资料blog.csdn.net/qq_36025814/article/details/108820679。

测试验证:最新日志格式如下图,telegraf的配置为

[[inputs.tail]]

  files = ["/usr/local/LB7XGW/logs/access_log"]

  from_beginning = false

  grok_patterns = ["%{NGINX_ACCESS_LOG}"]

  name_override = "nginx_access_log"

  grok_custom_pattern_files = []

  grok_custom_patterns = '''

    NGINX_ACCESS_LOG \"%{TIMESTAMP_ISO8601:timestamp}\" \"(-|%{IP:proxy_addr})\" \"(-|%{NUMBER:proxy_port})\" \"(-|%{IP:proxy_server_addr})\" \"(-|%{NUMBER:proxy_server_port})\" \"(-|%{NUMBER:vni})\" \"%{NUMBER:pid}\" \"%{IP:remote_addr}\" \"%{DATA:server_name}\" \"%{DATA:http_host}\" \"%{WORD:request_method}\" \"%{URIPATHPARAM:request}\" \"%{DATA:server_protocol}\" \"%{NUMBER:request_length}\" \"%{NUMBER:bytes_sent}\" \"%{WORD:protocol_type}\" \"%{NUMBER:status}\" \"%{NUMBER:upstream_status}\" \"%{DATA:http_referer}\" \"%{DATA:http_user_agent}\" \"%{DATA:http_x_forwarded_for}\" \"%{DATA:upstream_addr}\" \"%{NUMBER:request_time}\" \"%{NUMBER:upstream_connect_time}\" \"%{NUMBER:upstream_header_time}\" \"%{NUMBER:upstream_response_time}\" \"%{NUMBER:tcpinfo_rtt}\" \"%{NUMBER:connection}\" \"%{NUMBER:connection_requests}\" \"%{DATA:ssl_protocol}\" \"%{DATA:ssl_cipher}\" \"%{DATA:ssl_session_reused}\" '''

  data_format = "grok"

经过测试发现这样可以输出到文件中,但是格式是influxdb,和Prometheus不兼容。

使用grok_exporter可以进行格式的转换,转成Prometheus的metric。

grok_exporter可以实时的监控nginx access日志(类似于tail -f),然后根据grok匹配,转成自定义的Prometheus metric格式

grok配置如下,可以配置多个type,label的条件可以根据需要配置

- type: counter

  name: nginx_request_time

  labels:

    timestamp: '{{.timestamp}}'

request_time: '{{.request_time}}'

Prometheus监控显示如图

grok_exporter目前只支持作为server,由Prometheus拉取。

 

方案4,部署influxdb。

这个需要部署influxdb集群。

测试验证:

[[outputs.influxdb_v2]]

  urls = ["XXX"]

  token = "XXX"

  organization = "test"

  bucket = "test"

显示结果

 

0条评论
0 / 1000
pan
2文章数
0粉丝数
pan
2 文章 | 0 粉丝
pan
2文章数
0粉丝数
pan
2 文章 | 0 粉丝
原创

telegraf监控方式调研

2023-10-08 03:04:44
183
0

Telegraf 可以直接从运行的系统中获取各种指标,以及从第三方 API 中提取指标,然后将指标保存至prometheus,通过grafana观测系统运行情况,调研了四种telegraf监控nginx的方案。

方案1,使用脚本

Telegraf部署目录/opt/app/telegraf/scripts,只需将脚本放在这里,telegraf 60s调用一次脚本。

ELB当前已经有monitor监控,后续新增指标不用修改monitor,只需修改telegraf目录下的脚本即可。

telegraf配置如下

[[inputs.exec]]

  commands = [

      "/opt/app/telegraf/scripts/collect_*"

  ]

 data_format = "influx"

脚本输出参考格式

[root@js10-az1-region-gateway-11e8e0e20 tmp]# ./collect_l7xgw_detail_stat.py

l7xgw,tag=lb-kaye0jh20g@listener-eew1g7wvw5@10.28.6.66 conn=867899

l7xgw,tag=lb-kaye0jh20g@listener-eew1g7wvw5@10.28.6.66 ms=235129598

l7xgw,tag=lb-h4kl25niba@listener-9rj7xastto@192.168.0.15 conn=111

l7xgw,tag=lb-h4kl25niba@listener-9rj7xastto@192.168.0.15 ms=153

这样prometheus的指标为l7xgw_conn,tag可以多个,可以表示不同的listener或者不同的upstream

计算请求耗时语句为increase(l7xgw_ms)/increase(l7xgw_conn),展示结果为

 

方案2,使用nginx内存数据

telegraf监控nginx,github上新版本已经支持nginx的不同模块作为输入

插件nginx使用的是nginx_http_stub_status_module,字段较少

插件nginx_vts模块,l7xgw编译了该模块,monitor计算qps数据就是从该模块采集。

主要数据为链接数据

以及不同维度(filter,server,upstream,shared)的业务数据

测试验证:测试环境可以通过telegraf的配置

[[inputs.nginx_vts]]

  urls = ["XXX/stats"]

[[outputs.http]]

  url = "XXX/prometheus/api/v1/write"

  data_format="prometheusremotewrite"

上传到Prometheus,查看对应的指标,总共390个数据较全。

使用测试环境grafana,并且1qps压测,每个请求耗时1s,grafana展示如图。

 

方案3,使用nginx日志

telegraf支持inputs.tail的方式,日志按照grok的语法进行分割。grok可以理解成写好的正则表达式,参考资料blog.csdn.net/qq_36025814/article/details/108820679。

测试验证:最新日志格式如下图,telegraf的配置为

[[inputs.tail]]

  files = ["/usr/local/LB7XGW/logs/access_log"]

  from_beginning = false

  grok_patterns = ["%{NGINX_ACCESS_LOG}"]

  name_override = "nginx_access_log"

  grok_custom_pattern_files = []

  grok_custom_patterns = '''

    NGINX_ACCESS_LOG \"%{TIMESTAMP_ISO8601:timestamp}\" \"(-|%{IP:proxy_addr})\" \"(-|%{NUMBER:proxy_port})\" \"(-|%{IP:proxy_server_addr})\" \"(-|%{NUMBER:proxy_server_port})\" \"(-|%{NUMBER:vni})\" \"%{NUMBER:pid}\" \"%{IP:remote_addr}\" \"%{DATA:server_name}\" \"%{DATA:http_host}\" \"%{WORD:request_method}\" \"%{URIPATHPARAM:request}\" \"%{DATA:server_protocol}\" \"%{NUMBER:request_length}\" \"%{NUMBER:bytes_sent}\" \"%{WORD:protocol_type}\" \"%{NUMBER:status}\" \"%{NUMBER:upstream_status}\" \"%{DATA:http_referer}\" \"%{DATA:http_user_agent}\" \"%{DATA:http_x_forwarded_for}\" \"%{DATA:upstream_addr}\" \"%{NUMBER:request_time}\" \"%{NUMBER:upstream_connect_time}\" \"%{NUMBER:upstream_header_time}\" \"%{NUMBER:upstream_response_time}\" \"%{NUMBER:tcpinfo_rtt}\" \"%{NUMBER:connection}\" \"%{NUMBER:connection_requests}\" \"%{DATA:ssl_protocol}\" \"%{DATA:ssl_cipher}\" \"%{DATA:ssl_session_reused}\" '''

  data_format = "grok"

经过测试发现这样可以输出到文件中,但是格式是influxdb,和Prometheus不兼容。

使用grok_exporter可以进行格式的转换,转成Prometheus的metric。

grok_exporter可以实时的监控nginx access日志(类似于tail -f),然后根据grok匹配,转成自定义的Prometheus metric格式

grok配置如下,可以配置多个type,label的条件可以根据需要配置

- type: counter

  name: nginx_request_time

  labels:

    timestamp: '{{.timestamp}}'

request_time: '{{.request_time}}'

Prometheus监控显示如图

grok_exporter目前只支持作为server,由Prometheus拉取。

 

方案4,部署influxdb。

这个需要部署influxdb集群。

测试验证:

[[outputs.influxdb_v2]]

  urls = ["XXX"]

  token = "XXX"

  organization = "test"

  bucket = "test"

显示结果

 

文章来自个人专栏
ELB中nginx的使用
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0