# 数据服务统计/监控相关问题排查指南
# 排查指南详细说明
通用前置检查:
- 确认版本:明确是
7.3 GA还是7.3.1版本。 - 确认组件安装:服务调用统计依赖 filebeat + logstash + elasticsearch 组件,确认已正确安装配置。
- 确认数据引擎版本:服务引擎(dataEngine)版本需与DAMP版本匹配。
- 查阅补丁列表:优先检索官方补丁。您可以通过以下链接访问官方补丁列表:
- DAMP 7.3.1 补丁列表: DAMP7.3.1补丁列表 (opens new window)
- DAMP 7.3 GA 补丁列表: DAMP7.3GA补丁列表 (opens new window)
# 场景一:服务调用统计页面报错
问题现象:
- 打开“服务调用统计”页面报500内部错误。
- 页面报“服务器内部错误”或“连接超时”。
- 统计接口返回5xx状态码。
- 点击统计页面后浏览器控制台报错。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,使用
Ctrl+F搜索关键词统计、500、调用统计。 - 相关补丁:
- DAMP 7.3.1:
DAMP_7.3.1_SERVER_20241018_P1(解决服务调用统计页面500错误) - DAMP 7.3 GA:
DAMP_7.3_DATAENGINE_20241018_P1(服务引擎统计相关补丁)
- DAMP 7.3.1:
- 解决方案:若找到描述匹配的补丁,则申请并应用。
- 操作:在官方补丁列表中,使用
第二步:检查ES连接状态。
- 操作:进入“平台配置” -> “平台参数配置”,检查搜索引擎相关配置。
- 配置项:
searchEngine.engineUrl = http://ES_IP:9200 searchEngine.engineUserName = elastic(如开启认证) searchEngine.enginePassword = ******(如开启认证) searchEngine.searchtype = es searchEngine.enginetype = ElasticSearch - 验证命令:
# 测试ES连通性 curl -XGET 'http://ES_IP:9200/_cat/health?v' # 查看ES索引是否存在 curl -XGET 'http://ES_IP:9200/_cat/indices?v' # 检查是否有api-log索引 curl -XGET 'http://ES_IP:9200/api-log-*/_search?pretty' - 解决方案:
- 如果ES地址错误,修正配置后点击“刷新缓存”。
- 如果ES服务未启动,启动ES服务。
- 如果ES启用了SSL,检查证书配置。
第三步:检查ES SSL证书配置(如启用HTTPS)。
- 现象:报错
General SSLEngine problem或SSLHandshakeException。 - 排查项:ES启用了HTTPS,但证书未导入JDK信任库。
- 解决方案:
# 将ES证书导入DAMP所在服务器的JDK信任库 keytool -import -alias es_cert -keystore $JAVA_HOME/jre/lib/security/cacerts -file es_cert.cer # 默认密码:changeit - 操作:导入证书后重启DAMP服务。
- 现象:报错
第四步:检查nginx配置(如有)。
- 操作:如果通过nginx访问DAMP,检查nginx配置。
- 排查项:nginx是否正确代理了统计接口。
- 解决方案:确保nginx配置中包含正确的proxy_pass路径。
# 场景二:统计数据不显示/不全
问题现象:
- 统计页面打开正常,但数据为空。
- 只有部分数据,缺少某段时间的调用记录。
- 点击“重新统计”无变化。
- 图表展示不全或格式错乱。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,搜索关键词
统计、显示、图表。 - 相关补丁:
- DAMP 7.3.1:
DAMP_7.3.1_UI_20250908_P1(解决显示不全问题) - DAMP 7.3 GA:
DAMP_7.3_UI_20250911_P1(解决字段类型不显示)
- DAMP 7.3.1:
- 解决方案:若找到描述匹配的补丁,则申请并应用。
- 操作:在官方补丁列表中,搜索关键词
第二步:检查filebeat配置。
- 操作:登录服务引擎所在服务器,检查filebeat配置和运行状态。
- filebeat配置文件(
/etc/filebeat/filebeat.yml):filebeat.inputs: - type: log paths: ['/opt/dataEngine/logs/api.log*'] encoding: UTF-8 fields: log-type: api-log tags: ['api-log'] json.keys_under_root: true json.add_error_key: true json.overwrite_keys: true output.logstash: hosts: ['logstash_IP:5044'] - 验证命令:
# 查看filebeat状态 systemctl status filebeat # 查看filebeat日志 tail -f /var/log/filebeat/filebeat.log # 确认日志文件存在且有新内容 ls -la /opt/dataEngine/logs/api.log* tail -f /opt/dataEngine/logs/api.log - 解决方案:
- 如果filebeat未运行,启动filebeat:
systemctl start filebeat。 - 如果路径错误,修正后重启filebeat。
- 确保filebeat对日志文件有读取权限。
- 如果filebeat未运行,启动filebeat:
第三步:检查logstash配置。
- 操作:登录logstash服务器,检查配置和运行状态。
- logstash配置文件(
/etc/logstash/conf.d/logstash.conf):input { beats { port => 5044 } } filter { date { match => [ "time", "UNIX_MS" ] locale => "cn" timezone => "Asia/Shanghai" target => "covert-time" } ruby { code => "event.set('covert-time', event.get('covert-time').time.localtime + 8*60*60)" } mutate { convert => ["covert-time", "string"] } date { match => [ "covert-time", "YYYY-MM-dd'T'HH:mm:ss.SSSZ", "ISO8601" ] locale => "cn" timezone => "Asia/Shanghai" } } output { elasticsearch { hosts => ["ES_IP:9200"] index => "%{[fields][log-type]}-%{+YYYY.MM.dd}" } } - 验证命令:
# 查看logstash状态 systemctl status logstash # 查看logstash日志 tail -f /var/log/logstash/logstash-plain.log # 测试logstash端口监听 netstat -anp | grep 5044 - 解决方案:
- 如果logstash未运行,启动logstash。
- 如果配置错误,修正后重启logstash。
- 确保ES地址配置正确且可访问。
第四步:检查ES索引数据。
- 操作:直接查询ES,确认是否有数据写入。
- 验证命令:
# 查看所有索引 curl -XGET 'http://ES_IP:9200/_cat/indices?v' # 查看api-log索引数据量 curl -XGET 'http://ES_IP:9200/api-log-*/_count?pretty' # 查看最近10条记录 curl -XGET 'http://ES_IP:9200/api-log-*/_search?pretty&size=10' - 解决方案:
- 如果索引不存在,说明日志未成功写入,检查filebeat/logstash链路。
- 如果索引存在但数据为空,检查日志格式是否匹配。
第五步:检查服务调用日志格式。
- 操作:查看服务引擎的
api.log文件,确认日志格式是否正确。 - 正确格式示例:
{ "time": 1672733243440, "name": "服务名称", "serviceId": "服务ID", "path": "/api/sql-services/test/query", "method": "POST", "client": "授权账号", "org": "授权部门", "app": "授权应用", "elapsed": 98, "ok": true } - 解决方案:
- 如果日志格式异常,检查服务引擎配置。
- 如果日志文件未滚动,检查log4j配置。
- 操作:查看服务引擎的
# 场景三:服务引擎监控无数据
问题现象:
- “服务引擎监控”页面显示“无数据”或“离线”。
- 引擎列表为空,看不到已注册的引擎。
- 引擎状态始终为“未知”或“异常”。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,搜索关键词
引擎、监控。 - 相关补丁:暂无直接相关补丁。
- 解决方案:按以下步骤排查。
- 操作:在官方补丁列表中,搜索关键词
第二步:检查服务引擎进程。
- 操作:登录服务引擎服务器,检查进程状态。
- 命令:
# 查看服务引擎进程 ps -ef | grep dataEngine # 查看服务引擎日志 tail -f /opt/dataEngine/logs/engine.log # 查看服务引擎端口监听 netstat -anp | grep 服务引擎端口 - 解决方案:
- 如果进程不存在,启动服务引擎。
- 如果进程存在但异常,重启服务引擎。
第三步:检查引擎注册配置。
- 操作:确认服务引擎配置文件中注册中心地址正确。
- 配置文件:
/opt/dataEngine/conf/application.yml - 关键配置:
dam: engine: register: address: http://DAMP_IP:DAMP_PORT enabled: true - 解决方案:
- 确保
address配置的DAMP地址可访问。 - 修改配置后重启服务引擎。
- 确保
第四步:检查网络连通性。
- 操作:测试服务引擎到DAMP服务器的网络。
- 命令:
# 测试DAMP服务是否可访问 curl -XGET 'http://DAMP_IP:DAMP_PORT/actuator/health' # 测试端口连通性 telnet DAMP_IP DAMP_PORT - 解决方案:
- 如果网络不通,检查防火墙设置。
- 如果DAMP服务未启动,启动DAMP服务。
第五步:检查引擎心跳。
- 操作:查看服务引擎日志中是否有心跳上报记录。
- 命令:
grep heartbeat /opt/dataEngine/logs/engine.log - 解决方案:
- 如果没有心跳记录,检查注册配置。
- 如果心跳失败,检查网络和DAMP服务状态。
# 场景四:调用日志采集失败
问题现象:
- filebeat日志报错,无法读取日志文件。
- logstash日志报错,无法连接ES。
- ES中没有新的索引创建。
- 日志采集链路中断。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,搜索关键词
日志、采集。 - 相关补丁:暂无直接相关补丁。
- 解决方案:按以下步骤排查。
- 操作:在官方补丁列表中,搜索关键词
第二步:检查filebeat常见错误。
错误1:权限不足
- 现象:
permission denied或could not open file - 解决方案:
# 查看文件权限 ls -la /opt/dataEngine/logs/api.log # 修改权限 chmod 644 /opt/dataEngine/logs/api.log # 或使用root用户运行filebeat
错误2:harvester读取失败
- 现象:
harvester for file failed - 解决方案:检查文件是否被其他进程占用,重启filebeat。
错误3:output.logstash连接失败
- 现象:
Failed to connect to logstash - 解决方案:
# 测试logstash端口连通性 telnet logstash_IP 5044 # 检查logstash服务状态 systemctl status logstash
- 现象:
第三步:检查logstash常见错误。
错误1:端口被占用
- 现象:
Address already in use - 解决方案:修改logstash配置文件中的端口,或停止占用端口的进程。
错误2:ES连接失败
- 现象:
Connection refused或No route to host - 解决方案:
# 测试ES连通性 curl -XGET 'http://ES_IP:9200' # 检查ES服务状态 systemctl status elasticsearch
错误3:日期解析错误
- 现象:
failed to parse date field - 解决方案:检查日志中的time字段格式,调整logstash配置中的match模式。
- 现象:
第四步:检查ES常见问题。
问题1:磁盘空间不足
- 现象:ES日志报
disk usage exceeded flood-stage - 解决方案:
# 查看磁盘使用 df -h # 清理旧索引 curl -XDELETE 'http://ES_IP:9200/api-log-2023.*'
问题2:集群状态异常
- 现象:
cluster health: red或yellow - 解决方案:
# 查看集群健康状态 curl -XGET 'http://ES_IP:9200/_cluster/health?pretty' # 查看未分配分片 curl -XGET 'http://ES_IP:9200/_cat/shards?v'
- 现象:ES日志报
第五步:重建采集链路。
- 操作:如果以上步骤都无法解决,尝试重建采集链路。
- 步骤:
- 停止filebeat、logstash服务。
- 清空filebeat注册表:
rm -rf /var/lib/filebeat/registry - 清空logstash的sincedb文件:
rm -rf /var/lib/logstash/.sincedb_* - 按顺序启动ES、logstash、filebeat。
- 触发一次服务调用,检查数据是否正常写入。
# 场景五:各部门调用分布异常
问题现象:
- 统计页面中“各部门调用分布”图表显示异常。
- 部门数据为空或显示不全。
- 调用次数统计不准确。
- 特定数据库(如GaussDB)环境下统计报错。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,搜索关键词
分布、部门、GaussDB。 - 相关补丁:
- DAMP 7.5.0:
DAMP_7.5.0_SERVER_20251016_P1(GaussDB适配补丁) - DAMP 7.3.1: 如有类似问题需联系技术支持获取适配补丁
- DAMP 7.5.0:
- 解决方案:若找到描述匹配的补丁,则申请并应用。
- 操作:在官方补丁列表中,搜索关键词
第二步:检查数据库方言兼容性。
- 现象:使用GaussDB、PostgreSQL等特定数据库时统计异常。
- 排查项:统计SQL中使用了特定数据库的方言语法。
- 解决方案:
- 查看DAMP后台日志,找到执行的统计SQL。
- 在数据库客户端中单独执行该SQL,分析错误。
- 申请数据库适配补丁。
第三步:检查部门数据同步。
- 操作:确认部门信息已正确同步到DAMP。
- 排查项:
- 在“部门目录”中是否已同步所有部门。
- 授权记录中的部门信息是否正确。
- 解决方案:
- 在“部门目录”中点击“重新同步”。
- 检查服务授权时是否正确选择了部门。
第四步:检查日志中的org字段。
- 操作:查看原始日志中的
org字段是否有值。 - 命令:
# 查看最近日志中的org字段 tail -20 /opt/dataEngine/logs/api.log | grep org - 解决方案:
- 如果
org字段为空,说明授权时未指定部门。 - 重新授权,填写部门信息。
- 如果
- 操作:查看原始日志中的
# 场景六:响应时间/性能问题
问题现象:
- 统计页面加载缓慢(超过10秒)。
- 查询大时间范围时超时。
- ES查询响应慢。
- 统计接口耗时高。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,搜索关键词
性能、慢、超时。 - 相关补丁:暂无直接相关补丁。
- 解决方案:按以下步骤排查。
- 操作:在官方补丁列表中,搜索关键词
第二步:检查ES索引优化。
- 操作:检查ES索引设置和分片情况。
- 命令:
# 查看索引设置 curl -XGET 'http://ES_IP:9200/api-log-*/_settings?pretty' # 查看索引分片 curl -XGET 'http://ES_IP:9200/_cat/shards/api-log-*?v' - 优化方案:
- 增加主分片数量以提高并行查询能力。
- 设置合适的刷新间隔。
- 对常用查询字段创建索引。
第三步:调整时间范围。
- 操作:统计页面默认查询时间范围是否过大。
- 解决方案:
- 缩小默认查询时间范围(如最近7天)。
- 增加时间范围选择控件。
- 对大数据量查询使用聚合而非全量数据。
第四步:检查服务引擎负载。
- 操作:查看服务引擎的CPU、内存使用情况。
- 命令:
# 查看服务引擎进程资源 top -p `pgrep -f dataEngine` # 查看JVM内存 jstat -gcutil `pgrep -f dataEngine` 1000 - 解决方案:
- 如果CPU过高,检查是否有慢SQL或大量并发调用。
- 如果内存不足,调整JVM参数增加内存。
- 考虑水平扩展服务引擎。
第五步:网络延迟排查。
- 操作:测试各组件之间的网络延迟。
- 命令:
# 测试DAMP到ES的延迟 ping ES_IP # 测试服务引擎到logstash的延迟 ping logstash_IP - 解决方案:
- 如果延迟过高,考虑将组件部署在同一机房。
- 优化网络配置,减少跳数。
← 数据服务接口开发问题 数据建模相关问题 →