Elasticsearch:API 网关 Apache APISIX 集成 Elasticsearch 实现实时日志监控
2022年9月22日 | by mebius
作者:王程程
本文将为你介绍 Apache APISIX 的 elasticsearch-logger 插件的相关信息,以及如何通过此插件获取 APISIX 的实时日志。
背景信息
Apache APISIX是一个动态、实时、高性能的API网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。作为API网关,Apache APISIX不仅拥有丰富的插件,而且支持插件的热加载。
Elasticsearch是一个基于Lucene库的搜索引擎。它提供了分布式、RESTful 风格的搜索和数据分析引擎,具有可扩展性、可分布式部署和可进行相关度搜索等特点,能够解决不断涌现出的各种用例。同时还可以集中存储用户数据,帮助用户发现意料之中以及意料之外的情况。
插件介绍
APISIX 以HTTP请求的方式向Elasticsearch发送 APISIX 的Runtime日志。插件elasticsearch-logger
采用bulk的格式进行日志上报,这允许 APISIX 可以将多条日志合并后再进行上报,这使得 APISIX 在对Elasticsearch进行日志上报方面更加灵活并且具有较好的性能。你可以参考文档APISIX 批处理器对日志合进行更加细致的配置。
配置步骤
首先,你需要安装完成 APISIX,本文所有步骤基于Centos 7.5系统进行。详细的安装步骤参考APISIX 安装指南。
步骤1:启动 Elasticsearch
本示例只演示了通过docker-compose
启动Elasticsearch单节点的方式,其它启动方式可参考Elasticsearch 官方文档。
# 使用 docker-compose 启动 1 个 Elasticsearch 节点, 1 个 kibana
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.1
container_name: elasticsearch
environment:
ES_JAVA_OPTS: -Xms512m -Xmx512m
discovery.type: single-node
xpack.security.enabled: 'false'
networks:
- es-net
ports:
- "9200:9200"
- "9300:9300"
kibana:
image: docker.elastic.co/kibana/kibana:7.17.1
container_name: kibana
envtgcodeironment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
I18N_LOCALE: zh-CN
networks:
- es-net
depends_on:
- elasticsearch
ports:
- "5601:5601"
networks:
es-net:
driver: bridge
步骤2:创建路由并配置插件
APISIX 默认配置文件中已启用elasticsearch-logger
插件,所以你只需要通过下方命令创建路由并配置elasticsearch-logger
插件就可以在 APISIX 中正常使用了。
curl http://127.0.0.1:9180/apisix/admin/routes/1
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins":{
"elasticsearch-logger":{
"endpoint_addr":"http://127.0.0.1:9200",
"field":{
"index":"services",
"type":"collector"
},
"ssl_verify":false,
"retry_delay":1,
"buffer_duration":60,
"max_retry_count":0,
"batch_max_size":1000,
"inactive_timeout":5,
"name":"elasticsearch-logger"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"127.0.0.1:1980":1
}
},
"uri":"/elasticsearch.do"
}'
上述代码中配置了Elasticsearch地址、目标field
,用户名与密码。
通过上述设置,就可以实现将/elasticsearch.do
路径的API请求日志发送至Elasticsearch的功能。
步骤3:发送请求
接下来我们通过API发送一些请求。
curl -i http://127.0.0.1:9080/elasticsearch.do?q=hello
HTTP/1.1 200 OK
output
hello, world
Copy
此时你可以登录Kibana控制台检索查看相关日志:
Click to Preview
自定义日志结构
当然,在使用过程中我们也可以通过elasticsearch-logger
插件提供的元数据配置,来设置发送至Elasticsearch的日志数据结构。通过设置log_format
数据,可以控制发送的数据类型。
比如以下数据中的$host
、$time_iso8601
等,都是来自于NGINX提供的内置变量;也支持如$route_id
和$service_id
等Apache APISIX提供的变量配置。
curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/elasticsearch-logger
-H 'X-API-KEY: edd1c9f034335f136f87ad84tgcodeb625c8f1' -X PUT -d '
{
"log_format": {
"host": "$host",
"@timestamp": "$time_iso8601",
"client_ip": "$remote_addr"
}
}'
Copy
通过发送请求进行简单测试,可以看到上述日志结构设置已生效。目前Apache APISIX提供多种日志格式模板,在配置上具有极大的灵活性,更多日志格式细节可参考Apache APISIX 官方文档。
此时你可以登录Kibana控制台检索查看相关自定义日志:
Click to Preview
如需关闭自定义日志结构,可参考下方操作。
curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/elasticsearch-logger
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X DELETE
此时,插件elasticsearch-logger
将使用默认格式上报日志。
关闭插件
如使用完毕,只需移除路由配置中elasticsearch-logger
插件相关的配置并保存,即可关闭路由上的插件。得益于 Apache APISIX 的动态化优势,开启和关闭插件的过程都不需要重启 Apache APISIX。
curl http://127.0.0.1:9080/apisix/admin/routes/1
tgcode-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["GET"],
"uri": "/hello",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'
总结
本文为大家介绍了关于elasticsearch-logger插件的功能与使用步骤,更多关于elasticsearch-logger插件说明和完整配置列表,可以参考官方文档。
也欢迎随时在GitHub Discussions中发起讨论,或通过邮件列表进行交流。
文章来源于互联网:Elasticsearch:API 网关 Apache APISIX 集成 Elasticsearch 实现实时日志监控
相关推荐: 使用 Elastic 8.4 搜索、解决问题并取得成功
作者:Dan Courcy 今天,我们很高兴地宣布推出全球领先的搜索驱动解决方案平台的最新版本,并全面推出 Elastic 8.4。 Elastic 8.4 为 Elastic Search Platform 及其三个内置解决方案(Elastic Enterp…