【最佳实践】Beats导入RabbitMQ日志至阿里云Elatic Stack实现可视化分析

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: RabbitMQ是一个开放源消息代理,创建于2007年以实现 AMQP,并且在过去的十二年中,不断增加插件列表,目前已包括 HTTP,STOMP,SMTP 和其他协议。它也是 Kafka 的一个强劲的竞争者。

RabbitMQ简介

RabbitMQ是消息队列软件,也称为消息代理或队列管理器。 简单地说; 它是定义队列的软件,应用程序连接到该队列以传输一条或多条消息。

image.png

一条消息可以包含任何种类的信息。 例如,它可能具有有关应在另一个应用程序(甚至可能在另一个服务器上)上启动的过程或任务的信息,或者可能只是一条简单的文本消息。 队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息为止。 接收应用程序然后处理该消息。

image.png

消息队列的基本体系结构很简单-有一些称之为生产者(producers)的客户端应用程序,它们可以创建消息并将其传递到代理(即消息队列)。 其他应用程序(称为消费者,也即consumers)连接到队列并订阅要处理的消息。 软件可以充当消息的生产者或消费者,或者既充当消息的消费者又充当生产者。 存储在队列中的消息将被存储,直到消费者检索到它们为止。

RabbitMQ的那些log

重要的是要知道,从2017年11月29日发布的3.7.0版开始,RabbitMQ 会记录到一个日志文件中。 在此之前,有两个日志文件。 在本文中,我使用的是RabbitMQ版本3.8.2,因此一个日志文件的内容将发送到Elasticsearch。 如果您使用的是RabbitMQ的早期版本,尤其是3.7.0之前的版本,请参考文档以获取有关两个不同日志文件的更多信息。

此外,对于当前版本的 RabbitMQ,您可以指定 RabbitMQ 将其日志文件保存在 Rabbitmq.conf中的位置,我将在安装过程中显示该文件。

准备工作

在本文中,我们将详述在如何使用阿里云 Beats 把我们想要的 RabbitMQ 日志导入到阿里云 Elastic Stack 中,并对日志进行可视化分析。

1、准备阿里云 Elasticsearch 6.7 版本环境,并使用创建的账号密码登录Kibana;
2、准备阿里云 Logstash 6.7 版本环境;
3、准备 RabbitMQ 服务
4、安装 Filebeat

安装 RabbitMQ

安装需要在阿里云 ECS 环境中进行,这里就不累述了。安装后,RabbitMQ 服务将启动并启用,以在需要启动时启动。 要检查状态,请运行:

# cd /usr/lib/rabbitmq/bin
# rabbitmq-server start

配置RabbitMQ

安装完成后,配置日志记录级别,进入/etc/rabbitmq/rabbitmq.config,配置日志级别和文件名,默认是 “info”,也可将其设置为“error”,即出错记录日志。

# vim /etc/rabbitmq/rabbitmq.config
{lager, [
  %%
  %% Log directory, taken from the RABBITMQ_LOG_BASE env variable by default.
  %% {log_root, "/var/log/rabbitmq"},
  %%
  %% All log messages go to the default "sink" configured with
  %% the `handlers` parameter. By default, it has a single
  %% lager_file_backend handler writing messages to "$nodename.log"
  %% (ie. the value of $RABBIT_LOGS).
   {handlers, [
     {lager_file_backend, [{file, "rabbit.log"},
                           {level, info},
                           {date, ""},
                           {size, 0}]}
  ]},
{extra_sinks, [
 
     {rabbit_channel_lager_event, [{handlers, [
                                     {lager_forwarder_backend,
                                      [lager_event, info]}]}]},
     {rabbit_conection_lager_event, [{handlers, [
                                       {lager_forwarder_backend,
                                        [lager_event, error]}]}]}
 
  ]}

经过这样的修改,我们的 log 的文件名将会变成为“rabbit.log”,同时我们的日志级别也被设置为 “info”。因为我们已经修改了我们的配置文件,我们需要重新启动 rabbitmq-server 才能使得这个配置起作用。我们执行如下的命令:

#####由于rabbitmq是通过rpm包安装,进入bin下启动###
# cd /usr/lib/rabbitmq/bin
# rabbitmq-server start

进入/var/log/rabbitmq可看到有输出rabbit.log

安装RabbitMQ demo应用

为了利用上述 RabbitMQ 设置,我将在 Spring Boot App 使用 RabbitMQ 的 JMS 客户端演示。 可以使用 README中的说明以及 Spring CLI 或 Java JAR 文件来进行设置。为了能够使得你能够编译应用,你必须安装 Java 8 的环境。我们按照如下的步骤来进行:

# git clone https://github.com/rabbitmq/rabbitmq-jms-client-spring-boot-trader-demo
####进入该应用所在根目录######
# mvn clean package
# java -jar target/rabbit-jms-boot-demo-1.2.0-SNAPSHOT.jar
 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.8.RELEASE)
2020-05-11 10:16:46.089  INFO 28119 --- [           main] com.rabbitmq.jms.sample.StockQuoter      : Starting StockQuoter v1.2.0-SNAPSHOT on zl-test001 with PID 28119 (/root/rabbitmq-jms-client-spring-boot-trader-demo/target/rabbit-jms-boot-demo-1.2.0-SNAPSHOT.jar started by root in /root/rabbitmq-jms-client-spring-boot-trader-demo)
2020-05-11 10:16:46.092  INFO 28119 --- [           main] com.rabbitmq.jms.sample.StockQuoter      : No active profile set, falling back to default profiles: default
2020-05-11 10:16:46.216  INFO 28119 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@1de0aca6: startup date [Mon May 11 10:16:46 CST 2020]; root of context hierarchy
2020-05-11 10:16:47.224  INFO 28119 --- [           main] com.rabbitmq.jms.sample.StockConsumer    : connectionFactory => RMQConnectionFactory{user='guest', password=xxxxxxxx, host='localhost', port=5672, virtualHost='/', queueBrowserReadMax=0}
2020-05-11 10:16:48.054  INFO 28119 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2020-05-11 10:16:48.062  INFO 28119 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
 ......
###经过上面配置,进入log下查看rabbitmq日志:
# pwd
/var/log/rabbitmq
erl_crash.dump  rabbit.log              rabbit@zl-test001.log              rabbit@zl-test001_upgrade.log
log

其中 rabbit.log 就是我们之前刚刚配置好的文件名。
接下来我们讲述如何使用阿里云 Filebeat 和 Logstash 把这些日志导入到阿里云 Elasticsearch 中。

配置阿里云 Filebeat

1、在阿里云 beats 数据采集中心,创建 Filebeat采集器
2、指定采集器名称、安装版本、采集器output及配置Yml配置。

image.png

Filebeat.input配置如下:

filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  fields:
    log_type: rabbitmq-server
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/rabbitmq/*log
  fields_under_root: true
  encoding: utf-8
  ignore_older: 3h

3、进入下一步,选择与 Logstash 同一 VPC 下的 ECS 实例,进行启动。

image.png

待采集器生效,我们就可以启动 Filebeat 服务。

image.png

配置阿里云 Logstash

通过配置 Beat 采集器,将 RabbitMQ 的 Log 发送到 Logstash 的 8100 端口,接下来我们配置 Logstash,使用了基本的 Grok 模式从原始消息中分离出时间戳,日志级别和消息,然后将输出发送到阿里云 Elasticsearch,并指定索引。

1、进入 Logstash 实例下的管道管理页面。
2、点击创建管道,并对管道进行配置。

配置文件如下:

input {
  beats {
    port => 8100
  }
}
 
filter {
  grok {
    match => { "message" => ["%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:log_level}\] \<%{DATA:field_misc}\> %{GREEDYDATA:message}"] }
  }
}
 
output {
   elasticsearch {
      hosts => "es-cn-42333umei000u1zp5.elasticsearch.aliyuncs.com:9200"
      user => "elastic"
      password => "E222ic@123"
      index => "rabbitmqlog-%{+YYYY.MM.dd}"
  }
}

3、下一步,定义管道参数并保持部署。

image.png

4、部署成功后,查看 ES 上保存的索引数据,说明 ES 已存储了经 Logstash 处理后的数据。

image.png

通过 kibana 查看日志文档

在阿里云 Elasticsearch 控制台进入 Kbana 中的 Management ,配置“index patterns”,设置为 Rabbitmlog-*

image.png

指定时间过滤字段后创建该索引模块。

image.png

进入 Discover 页面下,选择上面创建的 patterns,通过 Filter 过滤出 RabbitMQ 相关的日志。

image.png

从上面我们可以看出来我们已经有 RabbitMQ 的日志了。

配置Metricbeat采集rabbitMQ各项指标

我们同样也可以通过 metricbeat index pattern 对 RabbitMQ 进行数据采集,并通过Kibana实现可视化指标监控。

进入“Add metric data”

image.png

点击“RabbitMQ Metrics”

image.png

安装步骤下载并安装

image.png

按照上述指令对 Metricbeat 进行配置。
通过修改 /etc/metricbeat/metricbeat.yml 文件,设置 ES 集群链接信息:

setup.kibana:
  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
   host: "https://es-cn-451233mei000u1zp5.kibana.elasticsearch.aliyuncs.com:5601"
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["es-cn-4591jumei000u1zp5.elasticsearch.aliyuncs.com:9200"]
  # Enabled ilm (beta) to use index lifecycle management instead daily indices.
  #ilm.enabled: false
  # Optional protocol and basic auth credentials.
  #protocol: "https"
  username: "elastic"
  password: "12233"

启动 RabbitMQ 模块及 Metricbeat 服务

# sudo metricbeat modules enable rabbitmq
#####设置仪表盘#######
# sudo metricbeat setup
# sudo service metricbeat start

重启 Metricbeat 服务后点击该页的 check data,返回"Data successfully received from this module"表示已从该模块成功接收数据。

image.png

点击“RabbitMQ metrics dashboard”查看 Dashboard 监控大盘

image.png

声明:本文由“Beats:使用Elastic Stack监控RabbitMQ:”基于阿里云服务环境授权改编
原文作者:Elastic 中国社区布道师——刘晓国
合作编辑:Lettie/大禹

image.png

阿里云Elastic Stack】100%兼容开源ES,独有9大能力

相关活动


更多折扣活动,请访问阿里云 Elasticsearch 官网

阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费


image.png

image.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
消息中间件 存储 Serverless
【实践】快速学会使用阿里云消息队列RabbitMQ版
云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1协议的消息产品。云消息队列 RabbitMQ 版兼容开源 RabbitMQ 客户端,解决开源各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
106 2
|
4月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
269 2
|
7天前
|
存储 数据采集 监控
阿里云DTS踩坑经验分享系列|SLS同步至ClickHouse集群
作为强大的日志服务引擎,SLS 积累了用户海量的数据。为了实现数据的自由流通,DTS 开发了以 SLS 为源的数据同步插件。目前,该插件已经支持将数据从 SLS 同步到 ClickHouse。通过这条高效的同步链路,客户不仅能够利用 SLS 卓越的数据采集和处理能力,还能够充分发挥 ClickHouse 在数据分析和查询性能方面的优势,帮助企业显著提高数据查询速度,同时有效降低存储成本,从而在数据驱动决策和资源优化配置上取得更大成效。
91 9
|
6月前
|
消息中间件 安全 API
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
304 1
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(1)
|
6月前
|
消息中间件 开发工具 RocketMQ
消息队列 MQ产品使用合集之如何关闭客户端的日志记录
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
6月前
|
消息中间件 安全 Apache
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
252 0
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(2)
|
2月前
|
SQL 存储 人工智能
阿里云日志服务的傻瓜式极易预测模型
预测服务有助于提前规划,减少资源消耗和成本。阿里云日志服务的AI预测服务简化了数学建模,仅需SQL操作即可预测未来指标,具备高准确性,并能处理远期预测。此外,通过ScheduledSQL功能,可将预测任务自动化,定时执行并保存结果。
79 3
|
3月前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
77 9
|
4月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
2月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?