本文将为你介绍 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
environment:
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
...
hello, world
此时你能够登录 Kibana 控制台检索查看相干日志:
自定义日志构造
当然,在应用过程中咱们也能够通过 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: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"log_format": {"host":"$host","@timestamp":"$time_iso8601","client_ip":"$remote_addr"}
}'
通过发送申请进行简略测试,能够看到上述日志构造设置已失效。目前 Apache APISIX 提供多种日志格局模板,在配置上具备极大的灵活性,更多日志格局细节可参考 Apache APISIX 官网文档。
此时你能够登录 Kibana 控制台检索查看相干自定义日志:
如需敞开自定义日志构造,可参考下方操作。
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 \
-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 中发动探讨,或通过邮件列表进行交换。