如何部署 DeepFlow
可直接参考官网链接部署。
注:官网中使用 Docker 以 AllinOne 形式部署只适用于临时测试,因为 deepflow-server 需通过 k8s lease 进行选主,否则只能使用单副本
部分 pod 没有获取到,如何排查
首先,部署完成后,等待 deepflow 命名空间下各个 pod 都处于 Running 且 1/1 的状态后,通过 deepflow-ctl 检查 deepflow-agent 是否注册成功,具体查看STATE
值是否为NORMAL
:
[root@deepflow-demo ~]# deepflow-ctl agent list
ID NAME TYPE CTRL_IP CTRL_MAC STATE GROUP EXCEPTIONS REVISION UPGRADE_REVISION
55 deepflow-demo-V1 K8S_VM x.x.x.x xx:xx:xx:xx:xx:xx NORMAL default v6.6 11418
-
在确认 agent 状态正常的情况下,查看 grafana 面板 workload 变量或使用 auto_instance 过滤时,找不到某个具体的 pod,原因可能有以下几点:
- 没有流量,例如查询的 nginx pod,在面板右上角时间范围内,并没有进来或出去的流量
- 使用宿主机网络,例如查询的 nginx pod 使用了 hostNetwork 宿主机网络,在 cbpf 采集网卡数据时,只能把此 pod ip 作为宿主机 ip 识别
- 没有上层资源,deepflow 录入 pod 时,对应 pod 必须有一个上层资源,例如 deploy、daemonset 等,如 kind 类型就是 pod,则无法录入(认为 kind: pod 没有意义)
- 无法识别自定义资源,即对 pod 进行封装,自定义了上层资源。比如内部创建了一个 kind 类型非 k8s 自带的资源
-
对于以上情况,对应的解决方式:
- 打流即可,例如手动 curl 一下
- 截至目前 v6.6 lts 版本,还没有办法,不过后续版本可能会实现区分
- 必须需要一个上层资源
- 代码中,只能加载 k8s 默认资源。或者对 deepflow 进行二开,可参考此 issue 关联的 pr
-
如果以上情况都不属于,需要通过
deepflow-ctl
手动打开 deepflow-server 的 debug 日志,在日志中grep
对应 pod name 即可deepflow-ctl ingester -i [server pod ip] loglevel set debug
- 开启后在对应 server pod log 中 grep 没有展示的
pod name
、will query
、api_resources: 后几十行
- 查询后记得该回去:
deepflow-ctl ingester -i [server pod ip] loglevel set info