title: 关于监控

Octopus 基于sigs.k8s.io/controller-runtime上搭建,因此某些指标与控制器运行时和client-go相关。 同时github.com/prometheus/client_golangGo runtime提供了一些指标和过程状态。

指标类别

在 “种类”列中,使用第一个字母代表相应的单词:G - 仪表(Gauge),C - 计数器(Counter),H - 柱状图(Histogram),S - 摘要(Summary)。

Controller Runtime 指标对照表

Controller 参数

种类 名称 描述
C controller_runtime_reconcile_total 每个控制器的 reconcile 总数
C controller_runtime_reconcile_errors_total 每个控制器的 reconcile error 总数
H controller_runtime_reconcile_time_seconds 每个控制器的 reconcile 时间

Webhook 参数

种类 名称 描述
H controller_runtime_webhook_latency_seconds 处理请求的延迟时间柱状图

Kubernetes 客户端指标对照表

Rest 客户端参数

种类 名称 描述
C rest_client_requests_total HTTP 请求的数量,按状态码、方法和主机划分。
H rest_client_request_latency_seconds 请求延迟时间,以秒为单位。按动词和 URL 分类。

Workqueue 参数

种类 名称 描述
G workqueue_depth 工作队列的当前深度
G workqueue_unfinished_work_seconds 正在进行中,还没有被 work_duration 观察到,且正在进行中的工作数量,数值表示卡住的线程数量。可以通过观察这个数值的增加速度来推断卡死线程的数量。
G workqueue_longest_running_processor_seconds 工作队列运行时间最长的处理器已经运行了多少秒
C workqueue_adds_total 工作队列处理的添加总数
C workqueue_retries_total 工作队列处理的重试数量
H workqueue_queue_duration_seconds 一个 item 在被请求之前在工作队列中停留的时间,以秒为单位
H workqueue_work_duration_seconds 从工作队列处理一个项目需要多长时间,以秒为单位

Prometheus 客户端指标对照表

Go runtime 参数

种类 名称 描述
G go_goroutines 目前存在的 goroutines 的数量
G go_threads 创建的操作系统线程数
G go_info GO 环境的信息
S go_gc_duration_seconds 垃圾收集周期的暂停时间汇总
G go_memstats_alloc_bytes 已分配且仍在使用的字节数
C go_memstats_alloc_bytes_total 分配的字节总数,包括已经被释放的字节
G go_memstats_sys_bytes 从系统获得的字节数
C go_memstats_lookups_total 指针查找的总次数
C go_memstats_mallocs_total 已分配内存的总数
C go_memstats_frees_total 已释放内存的总数
G go_memstats_heap_alloc_bytes 已分配且仍在使用的 heap 字节数。
G go_memstats_heap_sys_bytes 从系统获得的 heap 数量
G go_memstats_heap_idle_bytes 未使用的 heap 字节数
G go_memstats_heap_inuse_bytes 正在使用的 heap 字节数
G go_memstats_heap_released_bytes 释放给 OS 的 heap 字节数
G go_memstats_heap_objects 已分配对象的数量
G go_memstats_stack_inuse_bytes stack allocator 使用的字节数
G go_memstats_stack_sys_bytes stack allocator 从系统获取的字节数
G go_memstats_mspan_inuse_bytes 内存跨度结构所使用的字节数。
G go_memstats_mspan_sys_bytes 内存跨度结构从系统获取的字节数
G go_memstats_mcache_inuse_bytes 内存缓存结构使用的字节数。
G go_memstats_mcache_sys_bytes 内存缓存结构从系统获取的字节数
G go_memstats_buck_hash_sys_bytes profile bucket 哈希表使用的字节数
G go_memstats_gc_sys_bytes 用于垃圾收集系统元数据的字节数
G go_memstats_other_sys_bytes 用于其他系统分配的字节数
G go_memstats_next_gc_bytes 下一次进行垃圾收集时的 heap 字节数
G go_memstats_last_gc_time_seconds 自 1970 年以来最后一次收集垃圾时间,精确到秒数
G go_memstats_gc_cpu_fraction 自程序启动以来,GC 使用的该程序可用 CPU 时间,精确到分钟

Running process 参数

种类 名称 描述
C process_cpu_seconds_total 用户和系统 CPU 总耗时,单位是秒
G process_open_fds 打开的的 file descriptors 的数量。
G process_max_fds file descriptors 数量的最大限额
G process_virtual_memory_bytes 虚拟内存大小(单位:字节)
G process_virtual_memory_max_bytes 虚拟内存大小的最大限额(单位:字节)
G process_resident_memory_bytes 预留内存大小,单位:字节
G process_start_time_seconds 进程自 unix 纪元以来的开始时间(秒)

Octopus 指标对照表

Limb 参数

种类 名称 描述
G limb_connect_connections 连接适配器当前的连接数量
C limb_connect_errors_total 连接适配器时出现的错误总数
C limb_send_errors_total 适配器所需发送设备的错误总数
H limb_send_latency_seconds 适配器所需发送设备的延迟时间的柱状图

监控

默认情况下,指标将在端口 8080上公开 (请参阅brain optionslimb options,则可以通过Prometheus进行收集,并通过Grafana进行可视化分析。 Octopus 提供了一个ServiceMonitor 定义 YAMLPrometheus Operator集成用于配置和管理 Prometheus 实例的工具。

Grafana 仪表盘

为方便起见,Octopus 提供了Grafana 仪表盘来可视化展示监视指标。

monitoring

与 Prometheus Operator 集成

使用prometheus-operator HELM Chart,您可以轻松地设置 Prometheus Operator 来监视 Octopus。 以下步骤演示了如何在本地 Kubernetes 集群上运行 Prometheus Operator:

  1. 使用cluster-k3d-spinup.sh通过k3d创建本地 Kubernetes 集群。
  2. 按照HELM 的安装指南安装 helm 工具,然后使用helm fetch --untar --untardir /tmp stable/prometheus-operator 将 prometheus-operator Chart 移至本地/ tmp目录。
  3. 从 prometheus-operator Chart 生成部署 YAML,如下所示。
    1. helm template --namespace octopus-monitoring \
    2. --name octopus \
    3. --set defaultRules.create=false \
    4. --set global.rbac.pspEnabled=false \
    5. --set prometheusOperator.admissionWebhooks.patch.enabled=false \
    6. --set prometheusOperator.admissionWebhooks.enabled=false \
    7. --set prometheusOperator.kubeletService.enabled=false \
    8. --set prometheusOperator.tlsProxy.enabled=false \
    9. --set prometheusOperator.serviceMonitor.selfMonitor=false \
    10. --set alertmanager.enabled=false \
    11. --set grafana.defaultDashboardsEnabled=false \
    12. --set coreDns.enabled=false \
    13. --set kubeApiServer.enabled=false \
    14. --set kubeControllerManager.enabled=false \
    15. --set kubeEtcd.enabled=false \
    16. --set kubeProxy.enabled=false \
    17. --set kubeScheduler.enabled=false \
    18. --set kubeStateMetrics.enabled=false \
    19. --set kubelet.enabled=false \
    20. --set nodeExporter.enabled=false \
    21. --set prometheus.serviceMonitor.selfMonitor=false \
    22. --set prometheus.ingress.enabled=true \
    23. --set prometheus.ingress.hosts={localhost} \
    24. --set prometheus.ingress.paths={/prometheus} \
    25. --set prometheus.ingress.annotations.'traefik\.ingress\.kubernetes\.io\/rewrite-target'=/ \
    26. --set prometheus.prometheusSpec.externalUrl=http://localhost/prometheus \
    27. --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false \
    28. --set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
    29. --set prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues=false \
    30. --set grafana.adminPassword=admin \
    31. --set grafana.rbac.pspUseAppArmor=false \
    32. --set grafana.rbac.pspEnabled=false \
    33. --set grafana.serviceMonitor.selfMonitor=false \
    34. --set grafana.testFramework.enabled=false \
    35. --set grafana.ingress.enabled=true \
    36. --set grafana.ingress.hosts={localhost} \
    37. --set grafana.ingress.path=/grafana \
    38. --set grafana.ingress.annotations.'traefik\.ingress\.kubernetes\.io\/rewrite-target'=/ \
    39. --set grafana.'grafana\.ini'.server.root_url=http://localhost/grafana \
    40. /tmp/prometheus-operator > /tmp/prometheus-operator_all_in_one.yaml
  4. 通过kubectl create ns octopus-monitoring创建octopus-monitoring命名空间。
  5. 通过kubectl apply -f /tmp/prometheus-operator_all_in_one.yaml将 prometheus-operator all-in-ine部署于本地集群。
  6. (可选)通过kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/deploy/e2e/all_in_one.yaml来部署 Octopus
  7. 通过kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/deploy/e2e/integrate_with_prometheus_operator.yaml 将监视集成部署于本地集群。
  8. 访问http://localhost/prometheus以通过浏览器查看 Prometheus Web 控制台,或访问http://localhost/grafana以查看 Grafana 控制台(管理员帐户为admin/admin)。
  9. (可选)从 Grafana 控制台导入Octopus 概述仪表盘