CMDB无快照数据问题排查

环境排查

  • 此文档描述4.0及以上的社区版的问题排查
  • windows主机暂不支持快照数据
  • 中控机上查看进程状态是否都是RUNNING: bkcec status all

cmdb日志排查

登陆cmdb机器,打开/data/bkce/logs/cmdb/cmdb_datacollection.INFO文件

  • 如果最近几条日志是“master check : i am still master”,那么表明数据处理进程正常工作。
  • 如果日志出现“subcribing channel 2_snapshot”后没有subChan Close,那么表明收数据协程正常工作。
  • 如果2和3条都正常,但没有”handle xx num mesg, routines xx“,说明通道里没数据,请到redis里 subscribe ${biz}_snapshot 确认通道是否没数据。具体参见本文档最后一段。

采集端排查

登陆无数据的agent机器,按以下指引排查:

检查进程是否存在

basereport进程存在且唯一

  • Linux: ps -ef | grep basereport
  • Windows: tasklist | findstr basereport
    若进程不存在,手动启动,检查启动失败的原因

  • Linux: cd /usr/local/gse/plugins/bin && ./basereport -c ../etc/basereport.conf

  • Windows(cygwin): cd /cygdrive/c/gse/plugins/bin/ && ./basereport -c ../etc/basereport.conf
  • Windows(无cygwin) : cd C:/gse/plugins/bin/ && start.bat basereport

检查数据上报连接

有正常ESTABLISHED的链接则ok

  • Linux netstat -antp | grep 58625 | grep ESTABLISHED
  • Windows netstat -ano | grep 58625
    若存在proxy,登陆proxy机器:检测58625端口同上。

GSE服务端排查

登陆 GSE后台服务器,检测 gse_data 是否连上9092端口:

  • Linux: lsof -nP -c dataWorker | grep :9092
  • Windows: netstat -ano | grep 9092
    看有没有 gse_data 的pid 开头命名的日志。 若有,tail查看日志内容
  1. datapid=$(pgrep -x dataWorker)
  2. ls -l /data/bkce/public/gse/data/${datapid}*

检查 KAFKA 数据

获取快照数据的topic名称

登陆任意ZK机器,查看ZK节点:

  1. /data/bkce/service/zk/bin/zkCli.sh -server zk.service.consul:2181
  2. # 连上zk终端后,显示CONNECTED,然后输入以下zk命令:
  3. get /gse/config/etc/dataserver/data/1001

正常会出现类似下面的数据结构

  1. {"server_id": -1, "data_set": "snapshot", "partition": 1, "cluster_index": 0, "biz_id": 2, "msg_system": 1}

快照topic名由data_set和biz_id组成,则 topic=snapshot2

检查数据

登陆任意 KAFKA 机器:查看KAFKA最新数据,等待1分钟查看是否有数据。如果有数据,在最后一行命令后加上| grep $ip $ip用无快照数据的ip替换,再次查看是否有数据。

  1. source /data/install/utils.fc
  2. cd /data/bkce/service/kafka/bin
  3. # $topic用上一步的值替换
  4. # 确认存在topic
  5. bash ./kafka-topics.sh --list --zookeeper zk.service.consul:2181/common_kafka | grep $topic
  6. # 确认topic的配置
  7. bash ./kafka-topics.sh --zookeeper zk.service.consul:2181/common_kafka --describe --topic $topic
  8. # 查看topic中的最新数据
  9. bash ./kafka-console-consumer.sh --bootstrap-server $LAN_IP:9092 --topic $topic

检查 databus 状态

登陆 BKDATA 机器,查看databus的任务

  • 是否有任务是RUNNING状态,如果没有输出,特别是REDIS段落,则说明初始化bkdata有问题
  • 查看任务状态是否有FAILED字样。
  1. cd /data/bkce/bkdata/dataapi/bin/
  2. bash check_databus_status.sh
  • 如果databus的任务均存在且都是RUNNING,查看日志输出。
  1. grep processed /data/bkce/logs/bkdata/databus_redis.log | tail
  • 如果databus的redis任务有failed报错,查看上述日志的包含Exception字样的最新日志。如果提示有dataapi.service.consul解析失败的错误,尝试重启databus:
  1. workon databus
  2. supervisorctl -c /data/bkce/etc/supervisor-bkdata-databus.conf restart all

检查 bkdata 的 cron 任务

如果CMDB有快照数据,监控没有,或者部分没有时,检查下bkdata所在机器的crontab是否包含update_cc_cache.sh 的定时任务:

crontab -l |grep update_cc_cache.sh

如果没有,应该安装时漏执行,或者执行过./bkcec clean cron后忘记加回来。可在中控机执行./bkcec install cron 重新安装上 cron 任务

检查redis通道数据

登陆 Redis 机器,查看通道数据是否更新:其中biz_id和上面获取dataid时的json里保持一致,它其实时“蓝鲸”这个业务的cmdb里存储的id。全新安装一般都为2。如果是从3.x升级的,则要注意。

  1. source /data/install/utils.fc
  2. redis-cli -h $REDIS_IP -p $REDIS_PORT -a $REDIS_PASS
  3. subscribe ${biz_id}_snapshot