更多精彩内容,欢迎观看:
《云原生网络数据面可观测性最佳实践》——四、ACK Net-Exporter 快速上手——2.ACK Net-Exporter 部署(上):https://developer.aliyun.com/article/1221319?groupCode=supportservice
2) 数据采集
使用自建或第三方Prometheus或Grafana收集监控数据并可视化
ACK Net Exporter支持输出到Prometheus Server实例,如果您使用自行搭建的Prometheus Server,您可以通过添加一组scrape_config的方式来使您的Prometheus Server实例主动抓取ACK Net Exporter的数据,类似如下配置:
# 只包含一个要抓取的端点的抓取配置。 scrape_configs: # "net-exporter_sample"将作为“job=<job_name>”标签添加到从此配置中抓取的任何时间序列中。 - job_name: "net-exporter_sample" static_configs: - targets: ["{kubernetesPod ip}:9102"]
如果您的Prometheus Server实例运行在ACK集群中,您也可以通过Prometheus服务发现功能自动获取到所有正常提供服务的ACK Net Exporter实例,您可以通过在Prometheus Server的配置中添加以下内容:
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-server-conf labels: name: prometheus-server-conf namespace: kube-system data: prometheus.yml: |- # 将以下内容添加到Promethes Server配置中。 - job_name: 'net-exporter' kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_endpoints_name] regex: 'net-exporter' action: keep - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role:Pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name
添加完成后,可以在Prometheus Server的Status > Targets界面看到已经生效的ACK Net Exporter实例,或者在Prometheus Server的Graph界面的搜索栏中输入inspector,即可看到自动补全的ACK Net Exporter指标。
您可以通过配置Grafana将Prometheus采集到的数据进行可视化操作:
● 打开Grafana页面,在左侧导航栏中选择+> Dashboard。
● 在New dashboard页面单击Add an empty panel。
● 进入Edit Panel页面,在下方Data source中输入Prometheus,然后选择已经完成Prometheus Server的接口地址。
● 单击Metric browser,然后输入inspector,Grafana会自动补全ACK Net Exporter所有就绪的Metric,单击右上角Save,在弹出框中单击Save,然后会出现可视化的数据,效果如下:
对于使用Grafana进行可视化图形显示的配置,可以参照上述的指标格式,对指标的显示格式进行调整,例如inspector_pod_tcppassiveopens指标,表征系统自开机或者Pod所属的容器创建后,归属于这个网络命名空间内的所有TCP连接由于接受客户端的握手请求创建的Socket总数变化,通常可以认为是表征TCP总连接数量的增长,为了更加直观的反应增长的速率变化,可以参考以下配置:
// 使用PromQL提供的rate()方法配置Metrics。 rate(inspector_pod_tcppassiveopens[1m]) // 使用net-exporter提供的标签来配置Legend,直观显示Metrics。 {{namespace}}/{{pod}}/{{node}}
使用应用实时监控服务ARMS收集监控数据并可视化
ACK Net Exporter支持通过应用实时监控服务ARMS进行数据可视化操作,步骤如下:
● 配置ACK Net Exporter自定义指标。
◦ 登录ARMS控制台,在左侧导航栏中选择Prometheus监控 > Prometheus实例列表。
◦ 在Prometheus监控页面左上角选择容器服务ACK集群所在的地域,然后单击目标实例名称(一般是集群名称)进入对应实例页面。
◦ 在左侧导航栏中单击服务发现,然后单击Targets页签,在页面下方的kubernetes-pods选项页可以看到ACK Net Exporter的指标已经配置成功。
如果没有找到相关的Pod,则需要您在配置页签下手动开启默认服务发现的选项。
● 在左侧导航栏中单击大盘列表,单击目标大盘进入Grafana,然后单击添加Panel,选择Graph类型,在Data source中选择开启ACK Net Exporter的集群相关的数据源。
● 单击Metric browser,然后输入inspector,Grafana会自动补全ACK Net Exporter所有就绪的Metric,单击右上角Save,在弹出框中单击Save,然后会出现可视化的数据,效果如下:
使用Grafana Loki收集监控事件并可视化
ACK Net Exporter采集的异常事件类型的数据,支持通过预先配置的Grafana Loki服务,由ACK Net Exporter向Loki进行实时推送,从而达到将分布式的异常事件进行集中式的串型查看分析,使用ACK Net Exporter配合Grafana Loki的服务步骤如下:
说明:服务需要位于ACK Net Exporter的Pod可以访问的网络中,ACK Net Exporter会主动向已经配置并就绪的Grafana Loki服务推送事件日志信息。
● 在安装ACK Net Exporter的配置页面中,将enableEventServer配置为true,将lokiServerAddress配置为Grafana Loki服务的地址。您可以配置Grafana Loki服务的IP地址,也可以配置Grafana Loki 服务的域名。
● 执行以下命令,访问Grafana Loki的服务地址来检验Grafana Loki服务是否已就绪。
curl http://[Grafana Loki实例的地址]:3100/ready
● 待Grafana Loki服务就绪后,添加Grafana Loki作为Grafana的数据源。打开Grafana页面,在左侧导航栏中选择Data source > Loki,输入Grafana Loki的接口地址,单击Save&test。
● 在左侧导航栏单击Explore,在页面顶部设置数据源为Loki,查看输出到Grafana Loki的事件信息。
您可以在Label filters下拉框中选择过滤某个Node的事件,也可以在Line containers中输入事件相关的信息来查看具体的事件。
您可以单击页面顶部的Add to dashboard,将配置好的事件Panel添加到大盘中。
ACK Net Exporter提供的事件根据事件的类型携带了不同的信息,单击事件的详情后,可以查看到详细的事件发生时的信息。
Grafana Loki服务支持通过LogQL语法查询信息,详细介绍,请参见LogQL。
使用ACK Net Exporter Cli工具收集监控事件
ACK Net Exporter Cli(以下简称inspector-cli)是ACK容器网络团队基于ACK Net Exporter既有的能力,提供场景化的问题排查辅助分析,获取即时内核异常事件日志的工具,针对云原生场景设计,帮助用户快速定位常见问题的深层次原因。
您可以通过在本地启动容器的方式运行inspector-cli。
# 启动临时容器用于使用incpector-cli,您可以更换镜像的版本来使用更新版本的特性。 docker run -it --name=inspector-cli --network=host registry.cn-hangzhou.aliyuncs.com/acs/inspector:v0.0.1-12-gff0558c-aliyun which inspector # /bin/inspector 是inspector-cli的执行路径,您可以直接在容器中使用inspector-cli.
例如,您可以通过以下方式使用inspector-cli获取到某个节点的ACK Net Exporter捕获的事件。
# 通过‘-e’指定需要获取事件的远端ACK Net Exporter事件服务地址。 inspector watch -e 10.1.16.255 # 以下为结果示例。 INFO TCP_RCV_RST_ESTAB Namespace=kube-systemPod=kube-proxy-worker-tbv5s Node=iZbp1jesgumdx66l8ym8j8Z Netns=4026531993 10.1.16.255:43186 -> 100.100.27.15:3128 ...
您也可以选择登录到ACK Net Exporter的inspector容器中排查问题。
# 执行命令时,需要将-n参数指定为net-exporter安装的命名空间,同时执行需要登入的节点上的net-exporter实例。 kubectl exec -it -n kube-system -c inspector net-exporter-2rvfh -- sh # 通过以下命令可以查看到当前节点上的网络数据面分布情况。 inspector list entity # 通过以下命令可以监听本地的网络异常事件日志及其信息。 inspector watch -d -v #{"time":"2023-02-03T09:01:03.402118044Z","level":"INFO","source":"/go/src/net-exporter/cmd/watch.go:63","msg":"TCPRESET_PROCESS","meta":"hostNetwork/hostNetwork node=izbp1dnsn1bwv9oyu2gaupz netns=ns0 ","event":"protocol=TCP saddr=10.1.17.113 sport=6443 daddr=10.1.17.113 dport=44226 state:TCP_OTHER "} # 通过指定多个远端的ACK Net Exporter实例,也可以观察到不同节点上发生的时间。 inspector watch -s 10.1.17.113 -s 10.1.18.14 -d -v