ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Telegraf 采集 Apache Mesos 指标:Mesos Input Plugin 完整配置与原理剖析

Telegraf 采集 Apache Mesos 指标:Mesos Input Plugin 完整配置与原理剖析 Telegraf 采集 Apache Mesos 指标Mesos Input Plugin 完整配置与原理剖析【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegrafApache Mesos 是一套开源的分布式资源管理与任务调度框架负责在集群中统一管理 CPU、内存、磁盘等资源并向上层框架如 Marathon、Chronos提供资源调度能力。在 Telegraf 的插件生态中inputs.mesos是一个专用于从 Mesos Master 与 SlaveAgent节点拉取运行指标Observability Metrics的输入插件它直接对接 Mesos 暴露的/metrics/snapshotHTTP 接口将快照中的 JSON 指标转换为 Telegraf 的 measurement是监控 Mesos 集群健康状态、资源使用率、任务流转和消息队列深度的标准方案。阅读完本文你将掌握如何配置[[inputs.mesos]]采集 Master/Slave 节点指标、如何利用master_collections与slave_collections按指标组精确裁剪采集范围、如何理解 Tagsrole、state、server、url的语义以及插件底层如何解析 URL、过滤指标、判定 Leader/Follower 的完整实现原理。插件概览与适用场景插件类型Input输入插件引入版本Telegraf v0.10.3 起可用适用平台all跨平台源码位置plugins/inputs/mesos/mesos.go测试见 mesos_test.go可复制配置见 sample.conf该插件默认不采集任何数据。由于 Mesos 集群的部署方式千差万别端口、协议、多 Master 选举、认证 TLS 等均可能不同插件不提供任何默认的采集目标用户必须显式配置要采集的 Master/Slave 节点地址这一点在 README 中有明确说明。从代码注册方式看插件在 plugins/inputs/all/mesos.go 中通过空导入import _ github.com/influxdata/telegraf/plugins/inputs/mesos完成注册并在 mesos.go 的init()中调用inputs.Add(mesos, ...)因此只需在配置中出现[[inputs.mesos]]即可启用。配置详解完整配置示例以下配置可直接复制到 Telegraf 配置文件如/etc/telegraf/telegraf.conf中使用# Telegraf plugin for gathering metrics from N Mesos masters [[inputs.mesos]] ## Timeout, in ms. timeout 100 ## A list of Mesos masters. masters [http://localhost:5050] ## Master metrics groups to be collected, by default, all enabled. master_collections [ resources, master, system, agents, frameworks, framework_offers, tasks, messages, evqueue, registrar, allocator, ] ## A list of Mesos slaves, default is [] # slaves [] ## Slave metrics groups to be collected, by default, all enabled. # slave_collections [ # resources, # agent, # system, # executors, # tasks, # messages, # ] ## Optional TLS Config # tls_ca /etc/telegraf/ca.pem # tls_cert /etc/telegraf/cert.pem # tls_key /etc/telegraf/key.pem ## Use TLS but skip chain host verification # insecure_skip_verify false参数逐项说明参数类型默认值说明timeoutint100毫秒采集请求的接口超时时间单位毫秒会作为timeoutxxxms查询参数附加到请求 URL 上masters[]string必填Mesos Master 地址列表例如[http://localhost:5050]可配置多个以实现多 Master 轮询master_collections[]string全部启用Master 侧要采集的指标组列表slaves[]string[]Mesos SlaveAgent地址列表默认不采集 Slaveslave_collections[]string全部启用Slave 侧要采集的指标组列表tls_castring空CA 证书路径tls_certstring空客户端证书路径tls_keystring空客户端私钥路径insecure_skip_verifyboolfalse跳过 TLS 证书链与主机名校验仅测试环境建议开启地址写法与默认端口逻辑插件对masters/slaves中的地址做了比较宽容的解析见 mesos.go 的parseURL若地址以http://或https://开头直接按 URL 解析若未带协议前缀例如只写了localhost:5050或172.17.8.101插件会自动补全Master 默认端口5050Slave 默认端口5051协议默认补全为http://并打印一条告警日志using ... as connection URL; please update your configuration to use an URL提示用户更新配置为完整 URLtimeout会以查询参数形式追加到每个请求上例如http://localhost:5050/metrics/snapshot?timeout100ms。全局配置选项与所有 Telegraf 插件一致inputs.mesos也支持在插件表之外使用interval、precision、name_override、name_prefix、name_suffix、tags、pass/drop等全局与插件级配置用于修改指标名、附加标签、控制采集频率和过滤字段。完整说明见 docs/CONFIGURATION.md#plugins。采集机制与底层实现请求端点与数据流插件每次采集都会向每个配置的节点发起 HTTP GET 请求目标路径为/metrics/snapshot见 mesos.go 的gatherMainMetrics。该端点返回 Mesos 指标快照的 JSON 对象形如{ master/cpus_total: 2, master/elected: 1, system/load_1min: 0.25 }插件拿到 JSON 后依次执行filterMetrics按采集组过滤 →parsers_json.JSONFlattener.FlattenJSON将嵌套 JSON 展平为扁平字段 →acc.AddFields(mesos, fields, tags)写入 measurementmesos。多节点并发采集在Gather方法mesos.go中插件使用sync.WaitGroup对每个 Master 和每个 Slave 的采集请求并发执行错误通过acc.AddError汇总。这意味着配置多个 Master 或大量 Slave 时采集吞吐不会因串行等待而线性退化。HTTP 客户端与 TLSHTTP 客户端通过createHTTPClientmesos.go创建复用tls.ClientConfig生成TLSClientConfig支持tls_ca、tls_cert、tls_key、insecure_skip_verify使用环境代理http.ProxyFromEnvironment客户端整体超时固定为4 秒。需要说明的是timeout配置项控制的是 Mesos 服务端的快照生成/返回超时作为 URL 查询参数下发给 Mesos而 HTTP 客户端的连接超时由插件内部固定为 4 秒。指标组过滤机制插件定义了两组完整的指标组白名单见 mesos.go 的allMetricsMasterresources, master, system, agents, frameworks, framework_offers, tasks, messages, evqueue, registrar, allocatorSlaveresources, agent, system, executors, tasks, messages当master_collections/slave_collections为空时initializemesos.go会自动填充为上述全部组timeout为 0 时也会自动回退为默认值100并打印信息日志。过滤采用黑名单差集思路metricsDiffmesos.go计算「全部组」与「用户选择组」的差集然后把差集组内的指标从快照 JSON 中逐一删除。其中有一处值得注意的工程细节allocator与framework_offers两组的指标名不可预测含框架 ID、角色名等动态段源码注释明确说明无法枚举因此在filterMetricsmesos.go中这两组是通过名称前缀匹配删除的allocator/前缀的指标归 allocator 组master/frameworks/与frameworks/前缀的指标归 framework_offers 组。测试 mesos_test.go 的TestMasterFilter与TestSlaveFilter正是围绕这一差集与前缀匹配逻辑编写的构造带随机值的指标集后断言保留组内指标存在、剔除组内指标不存在其中还包含master/frameworks/marathon/abc-123/unknown/unknown这类「未知指标类型」的边界用例。指标清单Metrics插件将采集到的所有指标展平为一个 measurement名称统一为mesos。以下按指标组列出全部字段名与 README 及 mesos.go 的getMetrics注册表完全一致。Master 指标组resources资源使用master/cpus_percent、master/cpus_used、master/cpus_totalmaster/cpus_revocable_percent、master/cpus_revocable_total、master/cpus_revocable_usedmaster/disk_percent、master/disk_used、master/disk_totalmaster/disk_revocable_percent、master/disk_revocable_total、master/disk_revocable_usedmaster/gpus_percent、master/gpus_used、master/gpus_totalmaster/gpus_revocable_percent、master/gpus_revocable_total、master/gpus_revocable_usedmaster/mem_percent、master/mem_used、master/mem_totalmaster/mem_revocable_percent、master/mem_revocable_total、master/mem_revocable_usedmasterMaster 自身状态master/elected是否当选 Leader1/0master/uptime_secssystem主机系统负载system/cpus_total、system/load_15min、system/load_5min、system/load_1minsystem/mem_free_bytes、system/mem_total_bytesagentsSlave/Agent 注册与连接情况master/slave_registrations、master/slave_removals、master/slave_reregistrationsmaster/slave_shutdowns_scheduled、master/slave_shutdowns_canceled、master/slave_shutdowns_completedmaster/slaves_active、master/slaves_connected、master/slaves_disconnected、master/slaves_inactivemaster/slave_unreachable_canceled、master/slave_unreachable_completed、master/slave_unreachable_scheduled、master/slaves_unreachableframeworks框架状态master/frameworks_active、master/frameworks_connected、master/frameworks_disconnected、master/frameworks_inactivemaster/outstanding_offersframework_offers按框架细分的调用/事件/任务统计名称含框架 ID 与角色不可穷举master/frameworks/subscribed、master/frameworks/calls_total、master/frameworks/calls、master/frameworks/events_total、master/frameworks/eventsmaster/frameworks/operations_total、master/frameworks/operationsmaster/frameworks/tasks/active、master/frameworks/tasks/terminalmaster/frameworks/offers/sent、master/frameworks/offers/accepted、master/frameworks/offers/declined、master/frameworks/offers/rescindedmaster/frameworks/roles/suppressedtasks任务状态机计数master/tasks_error、master/tasks_failed、master/tasks_finished、master/tasks_killed、master/tasks_lostmaster/tasks_running、master/tasks_staging、master/tasks_starting、master/tasks_dropped、master/tasks_gonemaster/tasks_gone_by_operator、master/tasks_killing、master/tasks_unreachablemessagesMaster 消息与校验统计master/invalid_executor_to_framework_messages、master/invalid_framework_to_executor_messagesmaster/invalid_status_update_acknowledgements、master/invalid_status_updates、master/dropped_messagesmaster/messages_authenticate、master/messages_deactivate_framework、master/messages_decline_offersmaster/messages_executor_to_framework、master/messages_exited_executor、master/messages_framework_to_executormaster/messages_kill_task、master/messages_launch_tasks、master/messages_reconcile_tasksmaster/messages_register_framework、master/messages_register_slave、master/messages_reregister_framework、master/messages_reregister_slavemaster/messages_resource_request、master/messages_revive_offers、master/messages_status_update、master/messages_status_update_acknowledgementmaster/messages_unregister_framework、master/messages_unregister_slave、master/messages_update_slavemaster/recovery_slave_removalsmaster/slave_removals/reason_registered、master/slave_removals/reason_unhealthy、master/slave_removals/reason_unregisteredmaster/valid_framework_to_executor_messages、master/valid_status_update_acknowledgements、master/valid_status_updatesmaster/task_lost/source_master/reason_invalid_offers、master/task_lost/source_master/reason_slave_removed、master/task_lost/source_slave/reason_executor_terminatedmaster/valid_executor_to_framework_messagesmaster/invalid_operation_status_update_acknowledgements、master/messages_operation_status_update_acknowledgementmaster/messages_reconcile_operations、master/messages_suppress_offers、master/valid_operation_status_update_acknowledgementsevqueue事件队列master/event_queue_dispatches、master/event_queue_http_requests、master/event_queue_messagesmaster/operator_event_stream_subscribersregistrar注册表状态存储registrar/state_fetch_ms、registrar/state_store_msregistrar/state_store_ms/max、/min、/p50、/p90、/p95、/p99、/p999、/p9999、/countregistrar/log/ensemble_size、registrar/log/recoveredregistrar/queued_operations、registrar/registry_size_bytesallocator资源分配器含分位数延迟统计部分名称含角色名不可穷举allocator/allocation_run_ms、allocator/allocation_run_ms/count、/max、/min、/p50、/p90、/p95、/p99、/p999、/p9999allocator/allocation_runsallocator/allocation_run_latency_ms、allocator/allocation_run_latency_ms/count、/max、/min、/p50、/p90、/p95、/p99、/p999、/p9999allocator/roles/shares/dominantallocator/event_queue_dispatchesallocator/offer_filters/roles/activeallocator/quota/roles/resources/offered_or_allocated、allocator/quota/roles/resources/guaranteeallocator/resources/cpus/offered_or_allocated、allocator/resources/cpus/totalallocator/resources/disk/offered_or_allocated、allocator/resources/disk/totalallocator/resources/mem/offered_or_allocated、allocator/resources/mem/totalSlave 指标组resources资源使用slave/cpus_percent、slave/cpus_used、slave/cpus_totalslave/cpus_revocable_percent、slave/cpus_revocable_total、slave/cpus_revocable_usedslave/disk_percent、slave/disk_used、slave/disk_totalslave/disk_revocable_percent、slave/disk_revocable_total、slave/disk_revocable_usedslave/gpus_percent、slave/gpus_used、slave/gpus_totalslave/gpus_revocable_percent、slave/gpus_revocable_total、slave/gpus_revocable_usedslave/mem_percent、slave/mem_used、slave/mem_totalslave/mem_revocable_percent、slave/mem_revocable_total、slave/mem_revocable_usedagentAgent 自身状态slave/registered、slave/uptime_secssystem主机系统负载system/cpus_total、system/load_15min、system/load_5min、system/load_1minsystem/mem_free_bytes、system/mem_total_bytesexecutors执行器与容器状态containerizer/mesos/container_destroy_errorsslave/container_launch_errors、slave/executors_preempted、slave/frameworks_activeslave/executor_directory_max_allowed_age_secsslave/executors_registering、slave/executors_running、slave/executors_terminated、slave/executors_terminatingslave/recovery_errorstasks任务状态计数slave/tasks_failed、slave/tasks_finished、slave/tasks_killed、slave/tasks_lostslave/tasks_running、slave/tasks_staging、slave/tasks_startingmessages消息校验统计slave/invalid_framework_messages、slave/invalid_status_updatesslave/valid_framework_messages、slave/valid_status_updates注意gpus_*系列指标仅在节点配置了 GPU 资源时才会产生非零值*_revocable_*系列对应可回收revocable资源配额。测试端 mesos_test.go 的masterMetricNames与slaveMetricNames完整枚举了上述字段可作为字段名正确性的权威参考。Tags 说明每个mesosmeasurement 都会携带以下标签server服务器的网络位置格式为host:port取自 URL 的 Hostname不含协议url服务器的 URL Origin格式为scheme://host:port剥离路径、查询参数与用户信息见urlTag实现 mesos.gorole节点角色取值为master或slave。此外所有 Master 指标会额外带一个标签stateleader或standby由master/elected字段判定。该判定逻辑位于 mesos.go当master/elected ! 0时标记为leader否则标记为standby。这一点对多 Master 高可用集群的监控非常有价值——你可以直接按stateleader过滤出当前真正承担调度职责的 Master 来观察其指标或在告警规则中监控standby数量是否符合预期。示例输出在真实集群上采集后Telegraf 输出的行协议Line Protocol示例如下来自 READMEmesos,rolemaster,stateleader,host172.17.8.102,server172.17.8.101 allocator/event_queue_dispatches0,master/cpus_percent0, master/cpus_revocable_percent0,master/cpus_revocable_total0, master/cpus_revocable_used0,master/cpus_total2, master/cpus_used0,master/disk_percent0,master/disk_revocable_percent0, master/disk_revocable_total0,master/disk_revocable_used0,master/disk_total10823, master/disk_used0,master/dropped_messages2,master/elected1, master/event_queue_dispatches10,master/event_queue_http_requests0, master/event_queue_messages0,master/frameworks_active2,master/frameworks_connected2, master/frameworks_disconnected0,master/frameworks_inactive0, master/invalid_executor_to_framework_messages0, master/invalid_framework_to_executor_messages0, master/invalid_status_update_acknowledgements0,master/invalid_status_updates0,master/mem_percent0, master/mem_revocable_percent0,master/mem_revocable_total0, master/mem_revocable_used0,master/mem_total1002, master/mem_used0,master/messages_authenticate0, master/messages_deactivate_framework0 ...从示例可以看到测量名统一为mesostags 中rolemaster、stateleader表明这是当前 Leader 节点server与host分别来自采集目标 URL 与 Telegraf 自身主机名大量字段为 0 属于正常现象计数器尚未触发事件master/elected1、master/frameworks_active2、master/event_queue_dispatches10等字段可直接用于构建集群健康看板。最佳实践与注意事项多 Master 全量配置在采用 ZooKeeper/Mesos 原生多 Master 选举的集群中建议把全部 Master 节点都写入masters再通过state标签区分 Leader/Standby避免单点采集盲区。按需裁剪指标组master_collections/slave_collections支持精确裁剪若只关心资源利用率可仅保留resourcessystemtasks能显著减少序列基数series cardinality降低存储与查询压力。默认端口与协议地址不写协议前缀时会自动补http://与默认端口Master 5050 / Slave 5051并输出告警日志建议在配置中显式写出完整 URL 以消除歧义若启用 TLS 请使用https://并配合tls_ca等证书参数。采集并发与超时插件对每个节点并发请求且 HTTP 客户端超时固定 4 秒timeout参数会下发给 Mesos 控制快照生成超时实际部署中可根据集群规模适当调大单位毫秒避免大集群下快照生成缓慢导致采集失败。监控重点指标Master 侧重点关注master/elected、master/uptime_secs、master/slaves_connected、master/outstanding_offers、master/tasks_running、master/event_queue_*、registrar/state_store_ms及allocator/allocation_run_ms分位数Slave 侧重点关注slave/uptime_secs、slave/executors_running、slave/tasks_running和资源*_percent系列。验证方式插件自带的单元测试mesos_test.go通过httptest.Server模拟 Mesos 的/metrics/snapshot端点用随机值填充完整指标集分别验证TestMesosMaster/TestMesosSlave端到端采集后字段完整落入 accumulatorTestMasterFilter/TestSlaveFilter指标组过滤含前缀匹配组行为正确TestWithPathDoesNotModify/TestURLTagDoesNotModifyURL 处理不产生副作用。若需在本地快速验证插件行为可先运行go test ./plugins/inputs/mesos/确认基础功能再参照 sample.conf 在测试环境中将masters指向真实或模拟的 Mesos 端点并通过telegraf --config 配置文件 --test观察输出是否符合预期。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表