关于监控

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 参数

种类名称描述
Ccontroller_runtime_reconcile_total每个控制器的 reconcile 总数
Ccontroller_runtime_reconcile_errors_total每个控制器的 reconcile error 总数
Hcontroller_runtime_reconcile_time_seconds每个控制器的 reconcile 时间

Webhook 参数

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

Kubernetes 客户端指标对照表

Rest 客户端参数

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

Workqueue 参数

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

Prometheus 客户端指标对照表

Go runtime 参数

种类名称描述
Ggo_goroutines目前存在的 goroutines 的数量
Ggo_threads创建的操作系统线程数
Ggo_infoGO 环境的信息
Sgo_gc_duration_seconds垃圾收集周期的暂停时间汇总
Ggo_memstats_alloc_bytes已分配且仍在使用的字节数
Cgo_memstats_alloc_bytes_total分配的字节总数,包括已经被释放的字节
Ggo_memstats_sys_bytes从系统获得的字节数
Cgo_memstats_lookups_total指针查找的总次数
Cgo_memstats_mallocs_total已分配内存的总数
Cgo_memstats_frees_total已释放内存的总数
Ggo_memstats_heap_alloc_bytes已分配且仍在使用的 heap 字节数。
Ggo_memstats_heap_sys_bytes从系统获得的 heap 数量
Ggo_memstats_heap_idle_bytes未使用的 heap 字节数
Ggo_memstats_heap_inuse_bytes正在使用的 heap 字节数
Ggo_memstats_heap_released_bytes释放给 OS 的 heap 字节数
Ggo_memstats_heap_objects已分配对象的数量
Ggo_memstats_stack_inuse_bytesstack allocator 使用的字节数
Ggo_memstats_stack_sys_bytesstack allocator 从系统获取的字节数
Ggo_memstats_mspan_inuse_bytes内存跨度结构所使用的字节数。
Ggo_memstats_mspan_sys_bytes内存跨度结构从系统获取的字节数
Ggo_memstats_mcache_inuse_bytes内存缓存结构使用的字节数。
Ggo_memstats_mcache_sys_bytes内存缓存结构从系统获取的字节数
Ggo_memstats_buck_hash_sys_bytesprofile bucket 哈希表使用的字节数
Ggo_memstats_gc_sys_bytes用于垃圾收集系统元数据的字节数
Ggo_memstats_other_sys_bytes用于其他系统分配的字节数
Ggo_memstats_next_gc_bytes下一次进行垃圾收集时的 heap 字节数
Ggo_memstats_last_gc_time_seconds自 1970 年以来最后一次收集垃圾时间,精确到秒数
Ggo_memstats_gc_cpu_fraction自程序启动以来,GC 使用的该程序可用 CPU 时间,精确到分钟

Running process 参数

种类名称描述
Cprocess_cpu_seconds_total用户和系统 CPU 总耗时,单位是秒
Gprocess_open_fds打开的的 file descriptors 的数量。
Gprocess_max_fdsfile descriptors 数量的最大限额
Gprocess_virtual_memory_bytes虚拟内存大小(单位:字节)
Gprocess_virtual_memory_max_bytes虚拟内存大小的最大限额(单位:字节)
Gprocess_resident_memory_bytes预留内存大小,单位:字节
Gprocess_start_time_seconds进程自 unix 纪元以来的开始时间(秒)

Octopus 指标对照表

Limb 参数

种类名称描述
Glimb_connect_connections连接适配器当前的连接数量
Climb_connect_errors_total连接适配器时出现的错误总数
Climb_send_errors_total适配器所需发送设备的错误总数
Hlimb_send_latency_seconds适配器所需发送设备的延迟时间的柱状图

监控

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

Grafana 仪表板

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

monitoring

与 Prometheus Operator 集成

使用prometheus-operator HELM 图表,您可以轻松地设置 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 图表移至本地/ tmp目录。
  3. 从 prometheus-operator 图表生成部署 YAML,如下所示。
    helm template --namespace octopus-monitoring \
    --name octopus \
    --set defaultRules.create=false \
    --set global.rbac.pspEnabled=false \
    --set prometheusOperator.admissionWebhooks.patch.enabled=false \
    --set prometheusOperator.admissionWebhooks.enabled=false \
    --set prometheusOperator.kubeletService.enabled=false \
    --set prometheusOperator.tlsProxy.enabled=false \
    --set prometheusOperator.serviceMonitor.selfMonitor=false \
    --set alertmanager.enabled=false \
    --set grafana.defaultDashboardsEnabled=false \
    --set coreDns.enabled=false \
    --set kubeApiServer.enabled=false \
    --set kubeControllerManager.enabled=false \
    --set kubeEtcd.enabled=false \
    --set kubeProxy.enabled=false \
    --set kubeScheduler.enabled=false \
    --set kubeStateMetrics.enabled=false \
    --set kubelet.enabled=false \
    --set nodeExporter.enabled=false \
    --set prometheus.serviceMonitor.selfMonitor=false \
    --set prometheus.ingress.enabled=true \
    --set prometheus.ingress.hosts={localhost} \
    --set prometheus.ingress.paths={/prometheus} \
    --set prometheus.ingress.annotations.'traefik\.ingress\.kubernetes\.io\/rewrite-target'=/ \
    --set prometheus.prometheusSpec.externalUrl=http://localhost/prometheus \
    --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false \
    --set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
    --set prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues=false \
    --set grafana.adminPassword=admin \
    --set grafana.rbac.pspUseAppArmor=false \
    --set grafana.rbac.pspEnabled=false \
    --set grafana.serviceMonitor.selfMonitor=false \
    --set grafana.testFramework.enabled=false \
    --set grafana.ingress.enabled=true \
    --set grafana.ingress.hosts={localhost} \
    --set grafana.ingress.path=/grafana \
    --set grafana.ingress.annotations.'traefik\.ingress\.kubernetes\.io\/rewrite-target'=/ \
    --set grafana.'grafana\.ini'.server.root_url=http://localhost/grafana \
    /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 概述仪表板
最后由 yzeng25更新 于