Kong
采集 Kong 指标、日志、链路信息
指标¶
1. Kong 配置¶
Kong 需要开启 Prometheus 插件后,方可上报指标数据,这里建议采用全局的方式进行配置,可参考 Kong 官方文档
通过 Kong Manager 进行配置¶
登陆 Kong Manager ,点击 Plugins 菜单,新增 Prometheus。
通过 Kong API 进行配置¶
curl -X POST http://localhost:8001/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "prometheus",
"config": {
"per_consumer": true,
"status_code_metrics" : true,
"bandwidth_metrics": true
}
}'
2. DataKit 配置¶
- 进入 datakit 安装目录下的
conf.d/samples目录,复制prom.conf.sample并命名为kong.conf
cp prom.conf.sample kong.conf
- 调整
kong.conf
只需调整以下两个参数,其他保持不变:
[[inputs.prom]]
## Exporter URLs.
urls = ["http://127.0.0.1:8001/metrics"]
keep_exist_metric_name = true
- 重启 DataKit
执行以下命令
3. Kong 指标集¶
| 指标名 | 单位 | 描述 |
|---|---|---|
| kong_bandwidth_bytes | bytes | Kong的带宽使用量,单位为字节 |
| kong_datastore_reachable | - | 数据存储是否可达的状态指标 |
| kong_http_requests_total | count | HTTP请求的总数 |
| kong_kong_latency_ms_bucket | ms | Kong自身延迟的直方图桶,单位为毫秒 |
| kong_kong_latency_ms_count | count | Kong自身延迟的计数 |
| kong_kong_latency_ms_sum | ms | Kong自身延迟的总和,单位为毫秒 |
| kong_latency_ms_bucket | ms | 请求延迟的直方图桶,单位为毫秒 |
| kong_latency_ms_count | count | 请求延迟的计数 |
| kong_latency_ms_sum | ms | 请求延迟的总和,单位为毫秒 |
| kong_memory_lua_shared_dict_bytes | bytes | Lua共享字典使用的内存,单位为字节 |
| kong_memory_lua_shared_dict_total_bytes | bytes | Lua共享字典总内存,单位为字节 |
| kong_memory_workers_lua_vms_bytes | bytes | 工作进程中的Lua虚拟机使用的内存,单位为字节 |
| kong_nginx_connections_total | count | Nginx连接的总数 |
| kong_nginx_metric_errors_total | count | Nginx指标错误的总数 |
| kong_nginx_requests_total | count | Nginx请求的总数 |
| kong_node_info | - | 节点信息 |
| kong_request_latency_ms_bucket | ms | 请求延迟的直方图桶,单位为毫秒 |
| kong_request_latency_ms_count | count | 请求延迟的计数 |
| kong_request_latency_ms_sum | ms | 请求延迟的总和,单位为毫秒 |
| kong_upstream_latency_ms_bucket | ms | 上游延迟的直方图桶,单位为毫秒 |
| kong_upstream_latency_ms_count | count | 上游延迟的计数 |
| kong_upstream_latency_ms_sum | ms | 上游延迟的总和,单位为毫秒 |
日志¶
1. Kong 配置¶
Kong 需要开启 TCP Log 插件后,方可上报日志数据
通过 Kong Manager 进行配置¶
登陆 Kong Manager ,点击 Plugins 菜单,新增 TCP Log。
参数说明:
- host:DataKit host
- port: DataKit 日志 socket 端口
通过 Kong API 进行配置¶
curl -X POST http://localhost:8001/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "tcp-log",
"config": {
"port": 9580,
"host" : "<datakit-host>"
}
}'
2. DataKit 配置¶
- 进入 datakit 安装目录下的
conf.d/log目录,复制logging.conf.sample并命名为kong-socket.conf
cp logging.conf.sample kong-socket.conf
- 调整
kong-socket.conf
可用以下全文替换:
# {"version": "1.22.0", "desc": "do NOT edit this line"}
[[inputs.logging]]
## Required
## File names or a pattern to tail.
# Only two protocols are supported:TCP and UDP.
sockets = [
"tcp://0.0.0.0:9580",
# "udp://0.0.0.0:9531",
]
## glob filteer
ignore = [""]
## Your logging source, if it's empty, use 'default'.
source = "kong_tcp_log"
## Add service tag, if it's empty, use $source.
service = ""
## Grok pipeline script name.
pipeline = ""
## optional status:
## "emerg","alert","critical","error","warning","info","debug","OK"
ignore_status = []
## optional encodings:
## "utf-8", "utf-16le", "utf-16be", "gbk", "gb18030" or ""
character_encoding = ""
## The pattern should be a regexp. Note the use of '''this regexp'''.
## regexp link: https://golang.org/pkg/regexp/syntax/#hdr-Syntax
# multiline_match = '''^\S'''
auto_multiline_detection = true
auto_multiline_extra_patterns = []
## Removes ANSI escape codes from text strings.
remove_ansi_escape_codes = false
## If the data sent failure, will retry forevery.
blocking_mode = true
## If file is inactive, it is ignored.
## time units are "ms", "s", "m", "h"
ignore_dead_log = "1h"
## Read file from beginning.
from_beginning = false
[inputs.logging.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
- 重启 DataKit
执行以下命令
Pipeline¶
Pipeline 可用于日志的字段提取,已内置 Pipeline 模版,可在 Pipeline 模版库里找到 Kong,克隆并使用。
链路¶
1. Kong 配置¶
Kong 需要开启 OpenTelemetry 插件后,方可上报链路数据。此功能需 Kong version ≥ 3.3.2。
开启全局链路配置¶
在 kong.conf 添加以下配置项:
或者加上环境变量:
重启 Kong 服务生效。
通过 Kong Manager 进行配置¶
登陆 Kong Manager ,点击 Plugins 菜单,新增 OpenTelemetry。
通过 Kong API 进行配置¶
=== ≥3.8.0
curl -X POST http://localhost:8001/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"protocols": [
"http"
],
"name": "opentelemetry",
"config": {
"propagation": {
"default_format": "datadog"
},
"traces_endpoint": "http://192.168.2.110:9529/otel/v1/traces"
},
"enabled": true
}'
=== ≥3.3.2 && <3.8.0
```shell
curl -X POST http://localhost:8001/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"protocols": [
"http"
],
"name": "opentelemetry",
"config": {
"endpoint": "http://192.168.2.110:9529/otel/v1/traces"
},
"enabled": true
}'
```
2. DataKit 配置¶
- 进入 datakit 安装目录下的
conf.d/opentelemetry目录,复制opentelemetry.conf.sample并命名为opentelemetry.conf
cp opentelemetry.conf.sample opentelemetry.conf
配置内容无需调整
- 重启 DataKit
执行以下命令