![Logo](https://user-images.githubusercontent.com/71620349/185368586-aed82d30-1534-453d-86ff-ecfa9d0f35bd.png)

# 页面无数据排查手册

- [页面无数据排查手册](#页面无数据排查手册)
  - [1、集群接入错误](#1集群接入错误)
    - [1.1、异常现象](#11异常现象)
    - [1.2、解决方案](#12解决方案)
    - [1.3、正常情况](#13正常情况)
  - [2、JMX连接失败](#2jmx连接失败)
  - [3、ElasticSearch问题](#3elasticsearch问题)
    - [3.1、异因一：缺少索引](#31异因一缺少索引)
      - [3.1.1、异常现象](#311异常现象)
      - [3.1.2、解决方案](#312解决方案)
    - [3.2、异因二：索引模板错误](#32异因二索引模板错误)
      - [3.2.1、异常现象](#321异常现象)
      - [3.2.2、解决方案](#322解决方案)
    - [3.3、异因三：集群Shard满](#33异因三集群shard满)
      - [3.3.1、异常现象](#331异常现象)
      - [3.3.2、解决方案](#332解决方案)


---

## 1、集群接入错误

### 1.1、异常现象

如下图所示，集群非空时，大概率为地址配置错误导致。

<img src=http://img-ys011.didistatic.com/static/dc2img/do1_BRiXBvqYFK2dxSF1aqgZ width="80%">

 

### 1.2、解决方案

接入集群时，依据提示的错误，进行相应的解决。例如：

<img src=http://img-ys011.didistatic.com/static/dc2img/do1_Yn4LhV8aeSEKX1zrrkUi width="50%">

### 1.3、正常情况

接入集群时，页面信息都自动正常出现，没有提示错误。







---

## 2、JMX连接失败

背景：Kafka 通过 JMX 服务进行运行指标的暴露，因此 `KnowStreaming` 会主动连接 Kafka 的 JMX 服务进行指标采集。如果我们发现页面缺少指标，那么可能原因之一是 Kafka 的 JMX 端口配置的有问题导致指标获取失败，进而页面没有数据。


具体见同目录下的文档：[解决连接JMX失败](./%E8%A7%A3%E5%86%B3%E8%BF%9E%E6%8E%A5JMX%E5%A4%B1%E8%B4%A5.md)


---









## 3、ElasticSearch问题

**背景：**
`KnowStreaming` 将从 Kafka 中采集到的指标存储到 ES 中，如果 ES 存在问题，则也可能会导致页面出现无数据的情况。

**日志：**
`KnowStreaming`  读写 ES 相关日志，在 `logs/es/es.log` 中！


**注意：**
mac系统在执行curl指令时，可能报zsh错误。可参考以下操作。

```bash
1 进入.zshrc 文件 vim ~/.zshrc 
2.在.zshrc中加入 setopt no_nomatch 
3.更新配置 source ~/.zshrc
```

---

### 3.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]
```


`curl http://{ES的IP地址}:{ES的端口号}/_cat/indices/ks_kafka*`  查看KS索引列表，发现没有索引。

#### 3.1.2、解决方案

执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本，来创建索引及模版。


---


### 3.2、异因二：索引模板错误

#### 3.2.1、异常现象

多集群列表有数据，集群详情页图标无数据。查询KS索引模板列表，发现不存在。

```bash
curl {ES的IP地址}:{ES的端口号}/_cat/templates/ks_kafka*?v&h=name 
```

正常KS模板如下图所示。

<img src=http://img-ys011.didistatic.com/static/dc2img/do1_l79bPYSci9wr6KFwZDA6 width="90%">



#### 3.2.2、解决方案

删除KS索引模板和索引

```bash
curl -XDELETE {ES的IP地址}:{ES的端口号}/ks_kafka*
curl -XDELETE {ES的IP地址}:{ES的端口号}/_template/ks_kafka*
```

执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本，来创建索引及模版。


---


### 3.3、异因三：集群Shard满

#### 3.3.1、异常现象

报错信息

```log
# 日志位置 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索引的指令
curl -s  -XPUT http://{ES的IP地址}:{ES的端口号}/ks_kafka_cluster_metric_test
```


#### 3.3.2、解决方案

ES索引的默认分片数量为1000，达到数量以后，索引创建失败。

+ 扩大ES索引数量上限，执行指令

```
curl -XPUT  -H"content-type:application/json" http://{ES的IP地址}:{ES的端口号}/_cluster/settings -d '
{
  "persistent": {
    "cluster": {
      "max_shards_per_node":{索引上限，默认为1000, 测试时可以将其调整为10000}
    }
  }
}'
```

执行 [ES索引及模版初始化](https://github.com/didi/KnowStreaming/blob/master/bin/init_es_template.sh) 脚本，来补全索引。


