集群 IP 溯源

最近更新时间:2024-08-08 11:48:31

我的收藏
本文介绍如何在腾讯云 Elasticsearch Service 上,开启 IP 溯源日志,进行请求来源的 IP 溯源。以帮助用户解决无法确定有哪些客户端在使用的情况。

使用限制

IP 溯源日志功能为腾讯云开发的ES内核能力,仅在腾讯云 Elasticsearch Service 的 PaaS 模式支持。当前支持的版本号为 6.8.2 / 7.10.1 / 7.14.2。
说明
2023年6月1日后创建的集群可直接使用该能力。在此之前创建的集群需要在控制台滚动重启集群,以将内核更新至最新才可使用。

设置 IP 溯源日志开启

集群维度动态配置开关

# req/rsp均支持独立开启、关闭
"http.tracer.request.enable"
"http.tracer.response.enable"

# 支持使用uri前缀过滤
"http.tracer.include"
"http.tracer.exclude"

# 支持ip过滤
"http.tracer.remote_ip.include"
"http.tracer.remote_ip.exclude"

# body打印支持独立开启、关闭
"http.tracer.request.body.enable"
"http.tracer.response.body.enable"
说明
强烈建议您尽可能多的设置过滤条件,避免日志打印过多,影响集群性能,甚至引发磁盘写满风险。
避免长期打开此开关,随用随开,用完及时关闭。

关闭示例

PUT _cluster/settings
{
"transient": {
"http.tracer.request.enable": false,
"http.tracer.response.enable": false,
"http.tracer.include": null,
"http.tracer.exclude": null,
"http.tracer.remote_ip.include": null,
"http.tracer.remote_ip.exclude": null,
"http.tracer.request.body.enable": false,
"http.tracer.response.body.enable": false
}
}

———关闭ip溯源日志———
不打印

开启示例

PUT _cluster/settings
{
"transient": {
"http.tracer.request.enable": true,
"http.tracer.response.enable": true,
"http.tracer.include": [
"/.kibana/_search"
]
}
}

———日志,打印req,rsp———
[2023-04-17T15:39:26,952][INFO ][o.e.h.HttpTracer ] [1681467780000360532] [29940][null][GET][/.kibana/_search] received request from [Netty4HttpChannel{localAddress=/9.10.64.164:9200, remoteAddress=/9.2.1.38:41696}]
[2023-04-17T15:39:26,959][INFO ][o.e.h.HttpTracer ] [1681467780000360532] [29940][null][OK][application/json; charset=UTF-8][2600808] sent response to [Netty4HttpChannel{localAddress=/9.10.64.164:9200, remoteAddress=/9.2.1.38:41696}] success [true]
---公网访问情况---
[2023-04-25T11:36:13,197][INFO ][o.e.h.HttpTracer ] [1681703897000800432] [74][null][GET][/.kibana/_search] received request from [Netty4HttpChannel{localAddress=/9.10.66.6:9200, remoteAddress=/9.10.65.111:53349}], body [], x-forwarded-for [113.108.77.60]
[2023-04-25T11:36:13,238][INFO ][o.e.h.HttpTracer ] [1681703897000800432] [74][null][OK][application/json; charset=UTF-8][2607129] sent response to [Netty4HttpChannel{localAddress=/9.10.66.6:9200, remoteAddress=/9.10.65.111:53349}] success [true]
PUT _cluster/settings
{
"transient": {
"http.tracer.request.enable": true,
"http.tracer.response.enable": false,
"http.tracer.request.body.enable": true,
"http.tracer.include": [
"/.kibana/_search"
]
}
}

———日志,打印body,不打印rsp———
[2023-04-25T10:36:08,090][INFO ][o.e.h.HttpTracer ] [1681703897000800432] [148][null][GET][/.kibana/_search] received request from [Netty4HttpChannel{localAddress=/9.10.66.6:9200, remoteAddress=/9.2.1.38:53310}], body [{"query":{"query_string":{"query":"*"}}}]
PUT _cluster/settings
{
"transient": {
"http.tracer.request.enable": true,
"http.tracer.response.enable": false,
"http.tracer.request.body.enable": true,
"http.tracer.remote_ip.exclude": "9.2.1.38",
"http.tracer.include": [
"/.kibana/_search"
]
}
}

———日志,过滤指定ip———
不打印
注意事项
1. 公网访问溯源
1.1 内网访问情况,remoteAddress 就是真实 IP;公网访问情况,remoteAddress 是负载均衡的网关 IP。
1.2 取 header 中的 x-forwarded-for 可以拿到真实的公网访问 IP,req 日志会输出。
2. IP 过滤
2.1 不填写则不过滤,可数组形式填写多个 IP 过滤。
2.2 不支持通过公网 IP 过滤(x-forwarded-for)。
3. http.tracer.include 定义的 uri 路径,末尾可以尽量加 * 来增加匹配,很多查询 uri 后面都会带 ? 参数。

在腾讯云控制台查看 IP 溯源日志

1. 登录腾讯云 Elasticsearch 控制台,单击集群名称访问目标集群,跳转至日志页面。
2. 输入关键字查找 IP 溯源日志,6.8.2 版本输入 "o.e.h.n.Netty4HttpTracer" 查找,7.10.1/7.14.2 版本输入 "o.e.h.HttpTracer" 查找。