跳到主要内容

使用 Elasticsearch 记录日志

Elasticsearch 是一个流行的基于 JSON 的数据存储,用于存储和索引大量数据。它通常用于存储来自各种来源的日志,并与 LogstashKibana 等工具配合使用,形成一个完整的可观测性堆栈,称为 Elastic (ELK) Stack。

APISIX 支持通过 elasticsearch-logger 插件将日志直接转发到 Elasticsearch。这些日志随后可以通过 Kibana 进行搜索、过滤和可视化,以收集用于管理应用程序的见解。

本指南将向你展示如何启用 elasticsearch-logger 插件,将 APISIX 与 ELK 堆栈集成以实现可观测性。

前置条件

  • 安装 Docker
  • 安装 cURL 以向服务发送请求进行验证。
  • 按照 快速入门教程 在 Docker 或 Kubernetes 中启动一个新的 APISIX 实例。

启动 Elasticsearch 和 Kibana

信息

APISIX 目前支持 Elasticsearch 7.x 及以下版本。本指南对 Elasticsearch 和 Kibana 均使用 7.17.1 版本。

在 Docker 中启动一个 Elasticsearch 实例:

docker run -d \
--name elasticsearch \
--network apisix-quickstart-net \
-v elasticsearch_vol:/usr/share/elasticsearch/data/ \
-p 9200:9200 \
-p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e discovery.type=single-node \
-e xpack.security.enabled=false \
docker.elastic.co/elasticsearch/elasticsearch:7.17.1

在 Docker 中启动一个 Kibana 实例以可视化 Elasticsearch 中的索引数据:

docker run -d \
--name kibana \
--network apisix-quickstart-net \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS="http://elasticsearch:9200" \
docker.elastic.co/kibana/kibana:7.17.1

如果成功,你应该能在 localhost:5601 上看到 Kibana Web 仪表板。

启用 elasticsearch-logger 插件

全局启用 elasticsearch-logger 并创建一个示例路由以生成日志。或者,你可以在路由上启用该插件。

在所有路由上启用 elasticsearch-logger 插件:

curl "http://127.0.0.1:9180/apisix/admin/global_rules/" -X PUT -d '
{
"id": "elasticsearch",
"plugins": {
"elasticsearch-logger": {
"endpoint_addrs": ["http://elasticsearch:9200"],
"field": {
"index": "gateway",
"type": "logs"
},
"ssl_verify": false,
"timeout": 60,
"retry_delay": 1,
"buffer_duration": 60,
"max_retry_count": 0,
"batch_max_size": 5,
"inactive_timeout": 5
}
}
}'

创建一个你将收集日志的示例路由:

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
"id": "getting-started-ip",
"uri": "/ip",
"upstream": {
"nodes": {
"httpbin.org:80":1
},
"type": "roundrobin"
}
}'

自定义日志格式

作为可选步骤,你可以自定义 elasticsearch-logger 的日志格式。大多数 APISIX 日志插件的日志格式可以在插件上本地自定义(例如绑定到路由),也可以使用 插件元数据 全局自定义。

使用 内置变量 将主机地址、时间戳和客户端 IP 地址添加到日志中:

curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/elasticsearch-logger" -X PUT -d '
{
"log_format":{
"host":"$host",
"timestamp":"$time_iso8601",
"client_ip":"$remote_addr"
}
}'

配置 Kibana

向路由发送一些请求以生成访问日志条目:

for i in {1..10}; do
curl -i "http://127.0.0.1:9080/ip"
done

localhost:5601 上打开 Kibana 仪表板,然后从菜单中单击 Discover 选项卡。创建一个新的索引模式以从 Elasticsearch 获取数据:


创建索引模式

创建一个模式 gateway 以匹配 Elasticsearch 中的索引数据:


为网关索引创建索引模式

如果你的配置正确,你可以返回 Discover 选项卡并查看来自 APISIX 的日志:


在 Kibana 中搜索 APISIX 日志

下一步

参阅 elasticsearch-logger 插件参考以了解更多有关插件配置选项的信息。