elasticsearch:api网关apacheapisix集成elasticsearch实现实时日志监控(代码片段)

Elastic中国社区官方博客 Elastic中国社区官方博客     2022-12-03     351

关键词:

作者:王程程

本文将为你介绍 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

output

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 中发起讨论,或通过邮件列表进行交流。

云数据库-elasticsearch

我的腾讯云专栏:https://cloud.tencent.com/developer/column/90363需求背景我们系统使用了自研网关,包括了api网关和准入网关,分别用来解决服务鉴权和用户身份鉴权。网关的访问日志存原先是自己部署es来存储,我们这次直接... 查看详情

极限网关——一个面向elasticsearch的高性能应用网关

欢迎和Medcl大神畅聊极限网关极限网关官方地址:https://极限网关.com/ 查看详情

elasticsearch-快速入门

Elasticsearch是基于Apache2.0开源的实时、分布式、分析搜索引擎,相比Lucene,Elasticsearch的上手比较容易,这篇文章主要纪录Elasticsearch的基本概念和基本API。官方对Elasticsearch的定义:Elasticsearchisadistributed,RESTfulsearchandanalyticsenginecapableo... 查看详情

elasticsearch

目录ElasticSearch ElasticSearch高度可扩展的开源全文搜索和分析引擎快速地、近实时地对大数据进行存储、搜索和分析用来支撑有复杂的数据搜索需求的企业级应用特点分布式高可用多类型多API面向文档异步写入近实时基于Lucene&... 查看详情

使用 apache2 ssl 代理的 Elasticsearch

】使用apache2ssl代理的Elasticsearch【英文标题】:Elasticsearchwithapache2sslproxy【发布时间】:2014-05-2112:48:43【问题描述】:最近我一直在尝试让Elasticsearch能够通过SSL使用。这让我走上了一条有趣的路线,从apache到nginx到apache到nginx,现... 查看详情

又一个apache顶级项目来了!apacheshenyu官宣毕业

...什么?ApacheShenYu一款使用 JavaReactor 开发的响应式API网关。以其高性能,动态灵活的流量管控,热插拔,易部署等特性,开箱即用为用户提供整套全生命周期的API网关,包含 API注册、服务代理、协议转换... 查看详情

又一个apache顶级项目来了!apacheshenyu官宣毕业

...什么?ApacheShenYu一款使用 JavaReactor 开发的响应式API网关。以其高性能,动态灵活的流量管控,热插拔,易部署等特性,开箱即用为用户提供整套全生命周期的API网关,包含 API注册、服务代理、协议转换... 查看详情

elasticsearch学习

一、特点分布式,高可用,多类型,多API,面向文档(nosql),异步写入,近实时,基于Lucene,Apache协议二、核心概念近实时:延时一般在一秒左右,折中方案(每个几秒刷新一次,index.refresh_inteform) 集群: 节点加入集群时要按... 查看详情

apache_conf[分析员]#elasticsearch(代码片段)

查看详情

zuul网关(代码片段)

1、Zuul路由网关简介及基本使用2、Zuul路由映射配置3、Zuul请求过滤配置 Zuul路由网关简介及基本使用简介ZuulAPI路由网关服务简介   请看上图,这里的API路由网关服务由Zuul实现,主要就是对外提供服务接口的时候,... 查看详情

elasticsearch之基本操作

elasticsearch是一个是开源的(Apache2协议),分布式的,RESTful的,构建在ApacheLucene之上的的搜索引擎。它有很多特点例如SchemaFree,DocumentOriented。它是#nosql的,基于JSON,同时支持多种API,包括HTTP,thrift,memcached。支持HTTP,是比较爽的... 查看详情

kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)

文章目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务... 查看详情

kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)

文章目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务... 查看详情

zuul网关(代码片段)

Zuul路由网关简介及基本使用简介ZuulAPI路由网关服务简介 请看上图,这里的API路由网关服务由Zuul实现,主要就是对外提供服务接口的时候,起到了请求的路由和过滤作用,也因此能够隐藏内部服务的接口细节,从来有利于保... 查看详情

使用 Apache Kafka 将数据从 MSSQL 同步到 Elasticsearch

】使用ApacheKafka将数据从MSSQL同步到Elasticsearch【英文标题】:SynchronizingdatafromMSSQLtoElasticsearchusingApacheKafka【发布时间】:2018-01-1612:21:22【问题描述】:我目前正在SQLServer中运行文本搜索,这已成为瓶颈,出于显而易见的原因,我... 查看详情

springboot调用设置密码的elasticsearch(代码片段)

    最近项目中使用到的Elasticsearch是设置密码的,所以我们在Springboot中使用的过程中也需要指定密码才可以连接到Elasticsearch,特此记录便于日后查阅。        增加bootstrap.yaml配置:elasticsearch:schema:httpaddress:127.... 查看详情

Azure 应用程序网关与 API AppService 没有 API 网关

】Azure应用程序网关与APIAppService没有API网关【英文标题】:AzureApplicationGatewaywithApiAppServicewithoutAPIgateway【发布时间】:2020-01-1522:31:54【问题描述】:如何在后端池中使用应用程序网关和API。请注意,由于成本和API很少,我们不想... 查看详情

【分享】啥是api网关?大公司为啥都有api网关?

参考技术A在这篇文章中将我们一起来探讨当前的API网关的作用。一、API网关的用处API网关我的分析中会用到以下三种场景。二、API网关在企业整体架构中的地位一个企业随着信息系统复杂度的提高,必然出现外部合作伙伴应用... 查看详情