[Optimize]补充ES集群Shard满的异常日志

1、调整文档的目录结构;
2、补充ES集群Shard满的异常日志;
3、强调说明ES日志所在的位置;
This commit is contained in:
ZQKC
2023-04-19 15:18:28 +08:00
committed by EricZeng
parent e61c446410
commit 3cb1f03668

View File

@@ -1,3 +1,10 @@
![Logo](https://user-images.githubusercontent.com/71620349/185368586-aed82d30-1534-453d-86ff-ecfa9d0f35bd.png)
# 页面无数据排查手册
---
## 1、集群接入错误 ## 1、集群接入错误
### 1.1、异常现象 ### 1.1、异常现象
@@ -20,31 +27,50 @@
## 2、JMX连接失败需使用3.0.1及以上版本)
### 2.1异常现象
Broker列表的JMX Port列出现红色感叹号则该Broker的JMX连接异常。
---
## 2、JMX连接失败
背景Kafka 通过 JMX 服务进行运行指标的暴露,因此 `KnowStreaming` 会主动连接 Kafka 的 JMX 服务进行指标采集。如果我们发现页面缺少指标,那么可能原因之一是 Kafka 的 JMX 端口配置的有问题导致指标获取失败,进而页面没有数据。
### 2.1、正异常现象
**1、异常现象**
Broker 列表的 JMX PORT 列出现红色感叹号,则表示 JMX 连接存在异常。
<img src=http://img-ys011.didistatic.com/static/dc2img/do1_MLlLCfAktne4X6MBtBUd width="90%"> <img src=http://img-ys011.didistatic.com/static/dc2img/do1_MLlLCfAktne4X6MBtBUd width="90%">
**2、正常现象**
#### 2.1.1、原因一JMX未开启 Broker 列表的 JMX PORT 列出现绿色,则表示 JMX 连接正常。
##### 2.1.1.1、异常现象 <img src=http://img-ys011.didistatic.com/static/dc2img/do1_ymtDTCiDlzfrmSCez2lx width="90%">
---
### 2.2、异因一JMX未开启
#### 2.2.1、异常现象
broker列表的JMX Port值为-1对应Broker的JMX未开启。 broker列表的JMX Port值为-1对应Broker的JMX未开启。
<img src=http://img-ys011.didistatic.com/static/dc2img/do1_E1PD8tPsMeR2zYLFBFAu width="90%"> <img src=http://img-ys011.didistatic.com/static/dc2img/do1_E1PD8tPsMeR2zYLFBFAu width="90%">
##### 2.1.1.2、解决方案 #### 2.2.2、解决方案
开启JMX开启流程如下 开启JMX开启流程如下
1、修改kafka的bin目录下面的`kafka-server-start.sh`文件 1、修改kafka的bin目录下面的`kafka-server-start.sh`文件
``` ```bash
# 在这个下面增加JMX端口的配置 # 在这个下面增加JMX端口的配置
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
@@ -53,19 +79,17 @@ fi
``` ```
2、修改kafka的bin目录下面对的`kafka-run-class.sh`文件 2、修改kafka的bin目录下面对的`kafka-run-class.sh`文件
``` ```bash
# JMX settings # JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then if [ -z "$KAFKA_JMX_OPTS" ]; then
KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}"
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}"
fi fi
# JMX port to use # JMX port to use
if [ $JMX_PORT ]; then if [ $JMX_PORT ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT - Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT" KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
fi fi
``` ```
@@ -74,14 +98,17 @@ fi
3、重启Kafka-Broker。 3、重启Kafka-Broker。
---
#### 2.1.2、原因二JMX配置错误
##### 2.1.2.1、异常现象
### 2.3、异原二JMX配置错误
#### 2.3.1、异常现象
错误日志: 错误日志:
``` ```log
# 错误一: 错误提示的是真实的IP这样的话基本就是JMX配置的有问题了。 # 错误一: 错误提示的是真实的IP这样的话基本就是JMX配置的有问题了。
2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:192.168.0.1 port:9999. java.rmi.ConnectException: Connection refused to host: 192.168.0.1; nested exception is: 2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:192.168.0.1 port:9999. java.rmi.ConnectException: Connection refused to host: 192.168.0.1; nested exception is:
@@ -89,15 +116,13 @@ fi
2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:127.0.0.1 port:9999. java.rmi.ConnectException: Connection refused to host: 127.0.0.1;; nested exception is: 2021-01-27 10:06:20.730 ERROR 50901 --- [ics-Thread-1-62] c.x.k.m.c.utils.jmx.JmxConnectorWrap : JMX connect exception, host:127.0.0.1 port:9999. java.rmi.ConnectException: Connection refused to host: 127.0.0.1;; nested exception is:
``` ```
#### 2.3.2、解决方案
##### 2.1.2.2、解决方案
开启JMX开启流程如下 开启JMX开启流程如下
1、修改kafka的bin目录下面的`kafka-server-start.sh`文件 1、修改kafka的bin目录下面的`kafka-server-start.sh`文件
``` ```bash
# 在这个下面增加JMX端口的配置 # 在这个下面增加JMX端口的配置
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
@@ -105,38 +130,45 @@ if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
fi fi
``` ```
2、修改kafka的bin目录下面对的`kafka-run-class.sh`文件 2、修改kafka的bin目录下面对的`kafka-run-class.sh`文件
``` ```bash
# JMX settings # JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then if [ -z "$KAFKA_JMX_OPTS" ]; then
KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}"
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${当前机器的IP}"
fi fi
# JMX port to use # JMX port to use
if [ $JMX_PORT ]; then if [ $JMX_PORT ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT - Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT" KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
fi fi
``` ```
3、重启Kafka-Broker。 3、重启Kafka-Broker。
---
#### 2.1.3、原因三JMX开启SSL
##### 2.1.3.1、解决方案 ### 2.4、异因三JMX开启SSL
#### 2.4.1、异常现象
```log
# 连接JMX的日志中出现SSL认证失败的相关日志。TODO欢迎补充具体日志案例。
```
#### 2.4.2、解决方案
<img src=http://img-ys011.didistatic.com/static/dc2img/do1_kNyCi8H9wtHSRkWurB6S width="50%"> <img src=http://img-ys011.didistatic.com/static/dc2img/do1_kNyCi8H9wtHSRkWurB6S width="50%">
#### 2.1.4、原因四连接了错误IP
##### 2.1.4.1、异常现象 ---
### 2.5、异因四连接了错误IP
#### 2.5.1、异常现象
Broker 配置了内外网而JMX在配置时可能配置了内网IP或者外网IP此时`KnowStreaming` 需要连接到特定网络的IP才可以进行访问。 Broker 配置了内外网而JMX在配置时可能配置了内网IP或者外网IP此时`KnowStreaming` 需要连接到特定网络的IP才可以进行访问。
@@ -160,7 +192,7 @@ Broker 配置了内外网而JMX在配置时可能配置了内网IP或者
} }
``` ```
##### 2.1.4.2、解决方案 #### 2.5.2、解决方案
可以手动往`ks_km_physical_cluster`表的`jmx_properties`字段增加一个`useWhichEndpoint`字段,从而控制 `KnowStreaming` 连接到特定的JMX IP及PORT。 可以手动往`ks_km_physical_cluster`表的`jmx_properties`字段增加一个`useWhichEndpoint`字段,从而控制 `KnowStreaming` 连接到特定的JMX IP及PORT。
@@ -184,49 +216,66 @@ SQL例子
UPDATE ks_km_physical_cluster SET jmx_properties='{ "maxConn": 10, "username": "xxxxx", "password": "xxxx", "openSSL": false , "useWhichEndpoint": "xxx"}' where id={xxx}; UPDATE ks_km_physical_cluster SET jmx_properties='{ "maxConn": 10, "username": "xxxxx", "password": "xxxx", "openSSL": false , "useWhichEndpoint": "xxx"}' where id={xxx};
``` ```
### 2.2、正常情况
修改完成后,如果看到 JMX PORT这一列全部为绿色则表示JMX已正常。 ---
<img src=http://img-ys011.didistatic.com/static/dc2img/do1_ymtDTCiDlzfrmSCez2lx width="90%">
## 3、Elasticsearch问题
注意mac系统在执行curl指令时可能报zsh错误。可参考以下操作。
```
## 3、ElasticSearch问题
**背景:**
`KnowStreaming` 将从 Kafka 中采集到的指标存储到 ES 中,如果 ES 存在问题,则也可能会导致页面出现无数据的情况。
**日志:**
`KnowStreaming` 读写 ES 相关日志,在 `logs/es/es.log` 中!
**注意:**
mac系统在执行curl指令时可能报zsh错误。可参考以下操作。
```bash
1 进入.zshrc 文件 vim ~/.zshrc 1 进入.zshrc 文件 vim ~/.zshrc
2.在.zshrc中加入 setopt no_nomatch 2.在.zshrc中加入 setopt no_nomatch
3.更新配置 source ~/.zshrc 3.更新配置 source ~/.zshrc
``` ```
### 3.1、原因一:缺少索引 ---
### 3.1、异因一:缺少索引
#### 3.1.1、异常现象 #### 3.1.1、异常现象
报错信息 报错信息
``` ```log
# 日志位置 logs/es/es.log
com.didiglobal.logi.elasticsearch.client.model.exception.ESIndexNotFoundException: method [GET], host[http://127.0.0.1:9200], URI [/ks_kafka_broker_metric_2022-10-21,ks_kafka_broker_metric_2022-10-22/_search], status line [HTTP/1.1 404 Not Found] com.didiglobal.logi.elasticsearch.client.model.exception.ESIndexNotFoundException: method [GET], host[http://127.0.0.1:9200], URI [/ks_kafka_broker_metric_2022-10-21,ks_kafka_broker_metric_2022-10-22/_search], status line [HTTP/1.1 404 Not Found]
``` ```
curl http://{ES的IP地址}:{ES的端口号}/_cat/indices/ks_kafka* 查看KS索引列表发现没有索引。
`curl http://{ES的IP地址}:{ES的端口号}/_cat/indices/ks_kafka*` 查看KS索引列表发现没有索引。
#### 3.1.2、解决方案 #### 3.1.2、解决方案
执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来创建索引及模版。 执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来创建索引及模版。
---
### 3.2、原因二:索引模板错误
### 3.2、异因二:索引模板错误
#### 3.2.1、异常现象 #### 3.2.1、异常现象
多集群列表有数据集群详情页图标无数据。查询KS索引模板列表发现不存在。 多集群列表有数据集群详情页图标无数据。查询KS索引模板列表发现不存在。
``` ```bash
curl {ES的IP地址}:{ES的端口号}/_cat/templates/ks_kafka*?v&h=name curl {ES的IP地址}:{ES的端口号}/_cat/templates/ks_kafka*?v&h=name
``` ```
@@ -240,7 +289,7 @@ curl {ES的IP地址}:{ES的端口号}/_cat/templates/ks_kafka*?v&h=name
删除KS索引模板和索引 删除KS索引模板和索引
``` ```bash
curl -XDELETE {ES的IP地址}:{ES的端口号}/ks_kafka* curl -XDELETE {ES的IP地址}:{ES的端口号}/ks_kafka*
curl -XDELETE {ES的IP地址}:{ES的端口号}/_template/ks_kafka* curl -XDELETE {ES的IP地址}:{ES的端口号}/_template/ks_kafka*
``` ```
@@ -248,23 +297,29 @@ curl -XDELETE {ES的IP地址}:{ES的端口号}/_template/ks_kafka*
执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来创建索引及模版。 执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来创建索引及模版。
### 3.3、原因三集群Shard满 ---
### 3.3、异因三集群Shard满
#### 3.3.1、异常现象 #### 3.3.1、异常现象
报错信息 报错信息
``` ```log
com.didiglobal.logi.elasticsearch.client.model.exception.ESIndexNotFoundException: method [GET], host[http://127.0.0.1:9200], URI [/ks_kafka_broker_metric_2022-10-21,ks_kafka_broker_metric_2022-10-22/_search], status line [HTTP/1.1 404 Not Found] # 日志位置 logs/es/es.log
{"error":{"root_cause":[{"type":"validation_exception","reason":"Validation Failed: 1: this action would add [4] total shards, but this cluster currently has [1000]/[1000] maximum shards open;"}],"type":"validation_exception","reason":"Validation Failed: 1: this action would add [4] total shards, but this cluster currently has [1000]/[1000] maximum shards open;"},"status":400}
``` ```
尝试手动创建索引失败。 尝试手动创建索引失败。
``` ```bash
#创建ks_kafka_cluster_metric_test索引的指令 #创建ks_kafka_cluster_metric_test索引的指令
curl -s -XPUT http://{ES的IP地址}:{ES的端口号}/ks_kafka_cluster_metric_test curl -s -XPUT http://{ES的IP地址}:{ES的端口号}/ks_kafka_cluster_metric_test
``` ```
#### 3.3.2、解决方案 #### 3.3.2、解决方案
ES索引的默认分片数量为1000达到数量以后索引创建失败。 ES索引的默认分片数量为1000达到数量以后索引创建失败。
@@ -276,10 +331,12 @@ curl -XPUT -H"content-type:application/json" http://{ES的IP地址}:{ES的端
{ {
"persistent": { "persistent": {
"cluster": { "cluster": {
"max_shards_per_node":{索引上限默认为1000} "max_shards_per_node":{索引上限默认为1000, 测试时可以将其调整为10000}
} }
} }
}' }'
``` ```
执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来补全索引。 执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本,来补全索引。