当前位置:   article > 正文

夜莺(Flashcat)V6监控(三):categraf(All-in-on)采集器详解和告警自愈功能详解

categraf

目录

(一)告警自愈实现详解

(1):下载安装ibex,配置server端

 (2):配置ibex-agent端

 (2):验证ibex告警自愈功能

 (二)categraf (all-in-one)详解解剖

 (1) 主配置config.toml文件详解:

 (2)logs.toml配置详解

 (3)prometheus.toml配置详解


(一)告警自愈实现详解

    上一期我们在讲解夜莺的页面web功能的时候,提到了夜莺的一个强大功能---告警自愈,这一期我们先补充一下上一期没有实现出来的告警自愈的模块。我使用一个案例来告诉帮助大家怎么快速入门ibex夜莺的告警自愈功能。

     ibex是夜莺默认的一个告警自愈模块的一个工具插件,它也是有Server-Agent模式,一个服务端,一个客户端。服务端部署在一台机器上,客户端部署在我们监控的机器主机上。由于categraf秉承着all-in-one的理念,所以已经把ibex Agent端集合合并在了categraf里,直接在categraf里面启动配置就可以了。

夜莺关于告警自愈模块文档:使用 ibex 模块做告警自愈脚本的下发执行

 ibex项目下载地址GitHub - flashcatcloud/ibex

(1):下载安装ibex,配置server端

     我们先打开github项目地址 GitHub - flashcatcloud/ibex下载好ibex的安装包

    下载好以后我们把安装包上传到我们的server端,然后解压,agent端不用安装,因为安装了categraf,categraf集成了agent端配置

  1. tar xf ibex-1.0.0.tar.gz -C /opt
  2. cd /opt/ibex
  3. mysql < sql/ibex.sql ##初始化sql

     ibex 没有 web 页面,只提供 api 接口,鉴权方式是 http basic auth,basic auth 的用户名和密码默认都是 ibex,在 etc/server.conf 中可以找到,如果ibex 部署在互联网,一定要修改默认用户名和密码,当然,因为 Nightingale 要调用 ibex,所以 Nightingale 的 server.conf 和 webapi.conf 中也配置了 ibex 的 basic auth 账号信息,要改就要一起改啦。

  1. vim /opt/ibex/etc/server.conf
  2. ##这里面的很多配置可以根据自己的实际需求进行配置修改,比如mysql的地址,ibex启动的端口,RBC端口地址等

    这里的BasicAuth默认的账号密码默认都是ibex,这里要记住如果要修改的话,因为后面在夜莺的页面配置告警自愈功能的时候,需要添加正确的ibex的账号密码和server端的地址端口。

      做好这一切后如果觉得没问题可以直接启动ibex server端服务了,启动后会在本机暴露两个端口地址一个是10090端口是server端启动的默认端口,一个是20090是RPC远程过渡调用协议的端口,用于agent端与server端直接的互相通信。

  1. nohup ./ibex server &> server.log &
  2. ## 这里启动可以使用nohup和system启动,如果应用与生产环境或者经常使用可以使用systemctl来启动或者控制服务。这个server文件的模板在ibex的安装包里面也提供了 /opt/ibex/etc/service 在这里面有两个service的文件模板即可。

 (2):配置ibex-agent端

    上面也说过,ibex的agent端已经集合到了categraf最新版本中,所以我们不需要额外的去下载安装ibex,直接在我们需要监控的主机上安装好categraf进入categraf的配置文件配置即可,categraf不会安装的可以看一下我第一期关于夜莺的文章,里面详细的说明安装部署。

  1. vim //opt/categraf/conf/config.toml
  2. .....
  3. .....
  4. [http]
  5. enable = false
  6. address = ":9100"
  7. print_access = false
  8. run_mode = "release"
  9. [ibex]
  10. enable = true ##把这里的false改为true
  11. ## ibex flush interval
  12. interval = "1000ms"
  13. ## n9e ibex server rpc address
  14. servers = ["192.168.120.17:20090"] ##这里的地址改为ibex server端的RPC端口地址。
  15. ## temp script dir
  16. meta_dir = "./meta"
  17. [heartbeat]
  18. enable = true

    这里只需要修改两处,一个是开启ibex告警自愈的功能,一个是添加ibex server端的地址,使得server和agent直接能通信。更改好以后重启categraf即可。

 (2):验证ibex告警自愈功能

打开n9e的web页面,配置ibex模板。系统配置->通知模板->告警自愈

Address:是ibex-server端的IP地址: 端口不要弄错,ibex默认的server端的端口是10090

BasicAuthUser和BasicAuthUseribex的配置文件里面设置的basic的账号密码,默认的是ibex,如果修改了文件里的这个字段,需要在这里声明修改

 配置完成后我们要记得保存。

测试告警自愈功能告警自愈->执行历史->创建临时任务。

这里我们是为了测试一下告警自愈功能,所以我们直接创建一个临时的任务,让他在agent上进行自愈功能,当然如果要应用到告警规则里面也是可以的,具体在告警规则里面怎么配置,可以去查看我的上一篇文章夜莺(Flashcat)V6监控(二):夜莺页面全网最详细功能介绍及案列_博客 在这里面我详细说明了告警规则和告警自愈的功能介绍和使用。

Title: 给告警自愈取一个名字

Hosts:这里的机器列表必须是我们categraf数据上传到n9e的机器的主机名,在基础设施->机器列表里面查看我们上传到的主机名。这里标签就是我们categraf监控的主机的主机名hostsname

 Script:我们要执行的告警自愈的脚本内容

 

这样我们就能看到我们告警自愈后脚本的内容了 !

 (二)categraf (all-in-one)详解解剖

categraf的github地址:GitHub - flashcatcloud/categraf: for nightingale

categraf官方文件: Categraf 项目简介 - 快猫星云 (flashcat.cloud)

    Categraf 是一个监控采集 Agent,类似 Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用 All-in-one 的设计,不但支持指标采集,也希望支持日志和调用链路的数据采集。来自快猫研发团队,和 Open-Falcon、Nightingale 的研发是一拨人,是快猫星云自主研发的一个监控采集器。也是Go代码编写的,静态编译依赖少,容易分发,易于安装

    为了让大家更直观的了解认识categraf这个采集器,我这里举一个例子:

    当我们使用Prometheus来部署监控的时候,比如我们要监控一个MySQL的主从数据库的数据,我们就要去先去官网下载一个专门用于监控MySQL的export,然后再安装这个export再配置。先不说安装一个,万一我们要监控的指标有10个,20个,30个,比如我们要监控kafka,mysql,zookeeper等一些指标,那么我们如果用Prometheus的话就要去下载对应的这些监控指标的exporter,部署成本,维护成本,学习成本也很多,不同exporter我们就要去学习不同的配置方法,很费时。 

      那么!有没有一种采集器或者工具能直接把这些exporter都集合,ALL-in-one的方式,咱们拿来直接打开即用,当然那必须的有,那就是categraf!categraf集成了大大小小几十个监控指标,我们如果要使用对应的插件监控只需要进入配置文件打开即可。

    接下来咱直接进入正题,讲一下categraf这个工具的一些使用,插件的使用,指标在哪里配置

当我们安装好categraf以后,会有二个文件:一个是categraf,conf文件夹。categraf是程序启动文件,conf里面就包含了所有的插件配置文件:

config.toml: 主配置文件

logs.toml: logs-agent配置

prometheus.toml:prometheus agent配置

traces.yaml: tracs-agent配置

config/input/.toml:插件配置文件

  (1) 主配置config.toml文件详解:

  1. [global]
  2. # 是否打印配置内容
  3. print_configs = false
  4. # 机器名,作为本机的唯一标识,会为时序数据自动附加一个 agent_hostname=$hostname 的标签
  5. # hostname 配置如果为空,自动取本机的机器名
  6. # hostname 配置如果不为空,就使用用户配置的内容作为hostname
  7. # 用户配置的hostname字符串中,可以包含变量,目前支持两个变量,
  8. # $hostname 和 $ip,如果字符串中出现这两个变量,就会自动替换
  9. # $hostname 自动替换为本机机器名,$ip 自动替换为本机IP
  10. # 建议大家使用 --test 做一下测试,看看输出的内容是否符合预期
  11. # 这里配置的内容,再--test模式下,会显示为 agent_hostname=xxx 的标签
  12. hostname = ""
  13. # 是否忽略主机名的标签,如果设置为true,时序数据中就不会自动附加agent_hostname=$hostname 的标签
  14. omit_hostname = false
  15. # 时序数据的时间戳使用ms还是s,默认是ms,是因为remote write协议使用ms作为时间戳的单位
  16. precision = "ms"
  17. # 全局采集频率,15秒采集一次
  18. interval = 15
  19. # 配置文件来源,目前支持local和http两种配置,如果配置为local就读取本地的配置,如果配置为http,需要在[http]模块配置http来源
  20. providers = ["local"]
  21. # 全局附加标签,一行一个,这些写的标签会自动附到时序数据上
  22. # [global.labels]
  23. # region = "shanghai"
  24. # env = "localhost"
  25. # 日志模块
  26. [log]
  27. # 默认的log输出,到标准输出(stdout)
  28. # 如果指定为文件, 则写入到指定的文件中
  29. file_name = "stdout"
  30. # 当日志输出到文件时该配置生效,用于限制日志文件大小
  31. max_size = 100
  32. # 日志保留天数
  33. max_age = 1
  34. # 备份日志个数
  35. max_backups = 1
  36. # 是否使用本地时间格式化日志
  37. local_time = true
  38. # 是否用gzip对日志进行压缩
  39. compress = false
  40. # 发给后端的时序数据,会先被扔到 categraf 内存队列里,每个采集插件一个队列
  41. # chan_size 定义了队列最大长度
  42. # batch 是每次从队列中取多少条,发送给后端backend
  43. [writer_opt]
  44. batch = 1000
  45. chan_size = 1000000
  46. # 后端backend配置,在toml中 [[]] 表示数组,所以可以配置多个writer
  47. # 每个writer可以有不同的url,不同的basic auth信息
  48. [[writers]]
  49. url = "http://127.0.0.1:17000/prometheus/v1/write"
  50. # 认证用户,默认为空
  51. basic_auth_user = ""
  52. # 认证密码,默认为空
  53. basic_auth_pass = ""
  54. ## 请求头信息
  55. # headers = ["X-From", "categraf", "X-Xyz", "abc"]
  56. # 超时配置:单位是 ms
  57. timeout = 5000
  58. dial_timeout = 2500
  59. max_idle_conns_per_host = 100
  60. # 如果providers配置为http,就需要在这个地方进行配置
  61. [http]
  62. # 是否开启
  63. enable = false
  64. # 地址信息
  65. address = ":9100"
  66. print_access = false
  67. run_mode = "release"
  68. # ibex配置,用于配置ibex-server的地址,用于实现故障自愈
  69. [ibex]
  70. enable = false
  71. ## ibex刷新频率
  72. interval = "1000ms"
  73. ## ibex server 地址
  74. servers = ["127.0.0.1:20090"]
  75. ## 脚本临时保存目录
  76. meta_dir = "./meta"
  77. # 心跳上报给n9e
  78. [heartbeat]
  79. enable = true
  80. # 上报 os version cpu.util mem.util 等元信息
  81. url = "http://127.0.0.1:17000/v1/n9e/heartbeat"
  82. # 上报频率,单位是 s
  83. interval = 10
  84. # 认证用户
  85. basic_auth_user = ""
  86. # 认证密码
  87. basic_auth_pass = ""
  88. ## header 头信息
  89. # headers = ["X-From", "categraf", "X-Xyz", "abc"]
  90. # 超时配置,单位 ms
  91. timeout = 5000
  92. dial_timeout = 2500
  93. max_idle_conns_per_host = 100

      我再说一下这里的input文件夹,这里面的每一个input文件就是一个监控指标插件,比如我们要收集kafka的数据,只需进入input.kafka文件夹里面,编辑toml配置文件,配置instances字段,当我们如果有多台kafka的时候,只需要复制instances字段下面的所有内容,然后再添加一条instances的字段,比如我们这里有两台kafka机器01,02,那我们配置02的时候就只需要复制整段instances字段添加在下面即可,这个配置适用于所有的插件配置instances字段,比如添加多台mysql,zookeeper,也是这样复制整断instance即可

  1. [[instances]]
  2. # # interval = global.interval * interval_times
  3. # interval_times = 1
  4. # append some labels to metrics
  5. # cluster is a preferred tag with the cluster name. If none is provided, the first of kafka_uris will be used
  6. labels = { cluster="kafka-cluster-01" } ## 集群01
  7. # log level only for kafka exporter
  8. log_level = "error"
  9. # Address (host:port) of Kafka server.
  10. # kafka_uris = ["127.0.0.1:9092","127.0.0.1:9092","127.0.0.1:9092"]
  11. kafka_uris = []
  12. # Connect using SASL/PLAIN
  13. # Default is false
  14. # use_sasl = false
  15. # Only set this to false if using a non-Kafka SASL proxy
  16. # Default is true
  17. # use_sasl_handshake = false
  18. # SASL user name
  19. # sasl_username = "username"
  20. # SASL user password
  21. # sasl_password = "password"
  22. # The SASL SCRAM SHA algorithm sha256 or sha512 as mechanism
  23. # sasl_mechanism = ""
  24. # Connect using TLS
  25. # use_tls = false
  26. # The optional certificate authority file for TLS client authentication
  27. # ca_file = ""
  28. # The optional certificate file for TLS client authentication
  29. # cert_file = ""
  30. # The optional certificate file for TLS client authentication
  31. # cert_file = ""
  32. # The optional key file for TLS client authentication
  33. # key_file = ""
  34. # If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
  35. # insecure_skip_verify = true
  36. # Kafka broker version
  37. # Default is 2.0.0
  38. # kafka_version = "2.0.0"
  39. # if you need to use a group from zookeeper
  40. # Default is false
  41. # use_zookeeper_lag = false
  42. # Address array (hosts) of zookeeper server.
  43. # zookeeper_uris = []
  44. # Metadata refresh interval
  45. # Default is 1s
  46. # metadata_refresh_interval = "1m"
  47. # If true, all scrapes will trigger kafka operations otherwise, they will share results. WARN: This should be disabled on large clusters
  48. # Default is false
  49. # allow_concurrency = false
  50. # Maximum number of offsets to store in the interpolation table for a partition
  51. # Default is 1000
  52. # max_offsets = 1000
  53. # How frequently should the interpolation table be pruned, in seconds.
  54. # Default is 30
  55. # prune_interval_seconds = 30
  56. # Regex filter for topics to be monitored
  57. # Default is ".*"
  58. # topics_filter_regex = ".*"
  59. # Regex filter for consumer groups to be monitored
  60. # Default is ".*"
  61. # groups_filter_regex = ".*"
  62. [[instances]]
  63. # # interval = global.interval * interval_times
  64. # interval_times = 1
  65. # append some labels to metrics
  66. # cluster is a preferred tag with the cluster name. If none is provided, the first of kafka_uris will be used
  67. labels = { cluster="kafka-cluster-02" } ###这里添加一个字段即可复制
  68. # log level only for kafka exporter
  69. log_level = "error"
  70. # Address (host:port) of Kafka server.
  71. # kafka_uris = ["127.0.0.1:9092","127.0.0.1:9092","127.0.0.1:9092"]
  72. kafka_uris = []
  73. # Connect using SASL/PLAIN
  74. # Default is false
  75. # use_sasl = false
  76. # Only set this to false if using a non-Kafka SASL proxy
  77. # Default is true
  78. # use_sasl_handshake = false
  79. # SASL user name
  80. # sasl_username = "username"
  81. # SASL user password
  82. # sasl_password = "password"
  83. # The SASL SCRAM SHA algorithm sha256 or sha512 as mechanism
  84. # sasl_mechanism = ""
  85. # Connect using TLS
  86. # use_tls = false
  87. # The optional certificate authority file for TLS client authentication
  88. # ca_file = ""
  89. # The optional certificate file for TLS client authentication
  90. # cert_file = ""
  91. # The optional certificate file for TLS client authentication
  92. # cert_file = ""
  93. # The optional key file for TLS client authentication
  94. # key_file = ""
  95. # If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
  96. # insecure_skip_verify = true
  97. # Kafka broker version
  98. # Default is 2.0.0
  99. # kafka_version = "2.0.0"
  100. # if you need to use a group from zookeeper
  101. # Default is false
  102. # use_zookeeper_lag = false
  103. # Address array (hosts) of zookeeper server.
  104. # zookeeper_uris = []
  105. # Metadata refresh interval
  106. # Default is 1s
  107. # metadata_refresh_interval = "1m"
  108. # If true, all scrapes will trigger kafka operations otherwise, they will share results. WARN: This should be disabled on large clusters
  109. # Default is false
  110. # allow_concurrency = false
  111. # Maximum number of offsets to store in the interpolation table for a partition
  112. # Default is 1000
  113. # max_offsets = 1000
  114. # How frequently should the interpolation table be pruned, in seconds.
  115. # Default is 30
  116. # prune_interval_seconds = 30
  117. # Regex filter for topics to be monitored
  118. # Default is ".*"
  119. # topics_filter_regex = ".*"
  120. # Regex filter for consumer groups to be monitored
  121. # Default is ".*"
  122. # groups_filter_regex = ".*"

 (2)logs.toml配置详解

  1. [logs]
  2. # api_key http模式下生效,用于鉴权, 其他模式下占位符
  3. api_key =
  4. # 是否开启log-agent
  5. enable = false
  6. # 日志接收地址,可以配置tcp、http以及kafka
  7. send_to = "127.0.0.1:17878"
  8. # 日志发送协议:http/tcp/kafka
  9. send_type = "http"
  10. # kafka模式下的topic
  11. topic = "flashcatcloud"
  12. # 是否进行压缩
  13. use_compress = false
  14. # 是否使用tls
  15. send_with_tls = false
  16. # 批量发送的等待时间
  17. batch_wait = 5
  18. # 日志偏移量记录,用于断点续传
  19. run_path = "/opt/categraf/run"
  20. # 最大打开文件数
  21. open_files_limit = 100
  22. # 扫描目录日志评论
  23. scan_period = 10
  24. # udp采集的buffer大小
  25. frame_size = 9000
  26. # 是否采集pod的stdout/stderr日志
  27. collect_container_all = true
  28. # 全局处理规则, 该处不支持多行合并。多行日志合并需要在logs.items中配置
  29. # [[logs.Processing_rules]]
  30. # 日志采集配置
  31. [[logs.items]]
  32. # 日志类型,支持file/journald/tcp/udp
  33. type = "file"
  34. # 日志路径,支持统配符,用统配符,默认从最新位置开始采集
  35. ## 如果类型是file,则必须配置具体的路径; 如果类似是journald/tcp/udp,则配置端口
  36. path = "/opt/tomcat/logs/*.txt"
  37. # 日志的label 标识日志来源的模块
  38. source = "tomcat"
  39. # 日志的label 标识日志来源的服务
  40. service = "my_service"

其中,日志采集规则可以在全部logs.Processing_rules中配置,也可以在logs.items.logs_processing_rules中进行配置。

规则类型主要分为以下几种:

  • exclude_at_match:表示不发送匹配到的日志行

  • include_at_match:表示只发送匹配到的日志行

  • mask_sequences:可以在日志发送前对日志进行处理,比如替换日志内容

  • multi_line:多行合并,不支持全局配置

(1)不发送匹配到的日志行

  1. type = "exclude_at_match"
  2. name = "exclude_xxx_users"
  3. pattern="\\w+@flashcat.cloud"
  4. 表示日志中匹配到@flashcat.cloud 的行 不发送

(2)只发送匹配到的日志行

  1. type = "include_at_match"
  2. name = "include_demo"
  3. pattern="^2022*"
  4. 表示日志中匹配到2022开头的行 才发送

(3)对日志内容进行替换处理

  1. type = "mask_sequences"
  2. name = "mask_phone_number"
  3. replace_placeholder = "[186xxx]"
  4. pattern="186\\d{8}"
  5. 表示186的手机号会被[186xxx] 代替

(4)多行合并

  1. type = "multi_line"
  2. name = "new_line_with_date"
  3. pattern="\\d{4}-\\d{2}-\\d{2}" (多行规则不需要添加^ ,代码会自动添加)
  4. 表示以日期为日志的开头,多行的日志合并为一行进行采集

(3)prometheus.toml配置详解

    Categraf 本身以及可以完成很多指标的采集,如果你本身已经有了完整的 Promtheus 体系,但是想用 N9e,Categraf 也支持采集 Prometheus 指标。

  1. [prometheus]
  2. # 是否启动prometheus agent
  3. enable=false
  4. # 原来prometheus的配置文件
  5. # 或者新建一个prometheus格式的配置文件
  6. scrape_config_file="/path/to/in_cluster_scrape.yaml"
  7. ## 日志级别,支持 debug | warn | info | error
  8. log_level="info"
  9. # 以下配置文件,保持默认就好了
  10. ## wal file storage path ,default ./data-agent
  11. # wal_storage_path="/path/to/storage"
  12. ## wal reserve time duration, default value is 2 hour
  13. # wal_min_duration=2

比如这里配置 Prometheus 自动采集 kube-state-metrics 指标的 scrape 配置:

  1. global:
  2. scrape_interval: 15s
  3. external_labels:
  4. scraper: ksm-test
  5. cluster: test
  6. scrape_configs:
  7. - job_name: "kube-state-metrics"
  8. metrics_path: "/metrics"
  9. kubernetes_sd_configs:
  10. - role: endpoints
  11. api_server: "https://172.31.0.1:443"
  12. tls_config:
  13. ca_file: /etc/kubernetes/pki/ca.crt
  14. cert_file: /etc/kubernetes/pki/apiserver-kubelet-client.crt
  15. key_file: /etc/kubernetes/pki/apiserver-kubelet-client.key
  16. insecure_skip_verify: true
  17. scheme: http
  18. relabel_configs:
  19. - source_labels:
  20. [
  21. __meta_kubernetes_namespace,
  22. __meta_kubernetes_service_name,
  23. __meta_kubernetes_endpoint_port_name,
  24. ]
  25. action: keep
  26. regex: kube-system;kube-state-metrics;http-metrics
  27. remote_write:
  28. - url: "http://172.31.62.213/prometheus/v1/write"

然后在prometheus.toml配置中使用scrape_config_file加载上面的文件即可。

    本期文章讲解初步写到这就结束了关于categraf,当然我这文章写的肯定没有写完很多一些设置,我把大家在日常可能经常使用的功能讲解了一下,更多的关于这个神奇categarf的一些详情文档还有一些配置插件大家可以查看categraf的github托管项目,里面包含了很多一些关于插件或者说一些关于n9e仪表盘的json文件等等GitHub - flashcatcloud/categraf: collector for nightingale​​​​​​

如果对categraf还有n9e的一些用法配置,可以去查看我前面两篇文章可以带大家入门更快的了解夜莺体系 夜莺(Flashcat)V6监控(一):介绍及其部署_夜莺部署_Dream运维梦工厂的博客-CSDN博客

夜莺(Flashcat)V6监控(二):夜莺页面全网最详细功能介绍及案列_Dream运维梦工厂的博客-CSDN博客

后面还会继续更新,带大家从0到1更加充分的认识夜莺产品这个国产监控之光,开持续更新这个专栏,希望大家继续关注 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/158683
推荐阅读
相关标签
  

闽ICP备14008679号