十八、.net core(.NET 6)搭建ElasticSearch(ES)系列之使用Logstash通过Rabbitmq接收Serilog日志到ES

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用Logstash通过Rabbitmq接收Serilog日志到ES首先,要部署logstash 为了与前面的ElasticSearch版本保持一致,此处Logstash下载的版本也是7.13.1, 下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.13.1-windows-x86_64.zip


使用Logstash通过Rabbitmq接收Serilog日志到ES


首先,要部署logstash


为了与前面的ElasticSearch版本保持一致,此处Logstash下载的版本也是7.13.1,下载地址:

https://artifacts.elastic.co/downloads/logstash/logstash-7.13.1-windows-x86_64.zip

 

解压以后,修改一些配置:


config目录下,修改jvm.options文件,设置内存占用最小值和最大值:如果配置比较低,建议配置成512MB即可,如果电脑或服务器配置比较好,那就请随意。如果只是普通用途,比如记录普通日志啥的,配个4G内基本足够了。

1995789-20210630003408358-1101832066.png


config里面,有一个logstash-sample.conf文件,可以当做参考配置,随后咱们新建一个用于接收RabbitMQ的配置文件。先来写代码~~


package包项目下,新增引用 Serilog.Sinks.RabbitMQ组件:

1995789-20210630003452798-656624434.png

 

然后,在Program文件下面,添加serilog日志写入到RabbitMQ的一些配置:


1995789-20210630003517614-1298019453.png


以上代码如下:


logger.WriteTo.RabbitMQ((clientConfiguration, sinkConfig) =>
                         {
                             clientConfiguration.Username = "wesky";
                             clientConfiguration.Password = "wesky123";
                             clientConfiguration.Exchange = "WeskyExchange";
                             clientConfiguration.ExchangeType = "direct";
                             clientConfiguration.DeliveryMode = RabbitMQDeliveryMode.Durable;
                             clientConfiguration.RouteKey = "WeskyLog";
                             clientConfiguration.Port = 5672;
                             clientConfiguration.Hostnames.Add("127.0.0.1");
                             sinkConfig.TextFormatter = new JsonFormatter();
                         });



以上为了方便,所以写死了,大佬们可以写到配置文件里面去进行读取,这样好一点。

然后,程序启动时候,进行主动创建一个ExchangeWeskyExchange的,RouteKeyWeskyLogs的消息队列,包括生产者和消费者。之前有做过简单的RabbitMQ创建的案例,所以直接在原来的基础上做一些改动:


1995789-20210630003620058-1528936121.png


设置了两个RouteKey:WeskyLogWeskyLog2,以及两个队列 Log1Log2。咱们主要使用WeskyLogLog1

在消费者监听上面,做个过滤,对于队列是Log1的消息,直接返回不做处理,这样做到目的是消息不被消费,让logstash来消费消息:


1995789-20210630003644748-1542967816.png


现在开始配置logstash,上面有一个logstash-sample.conf文件,拷贝一分,重命名为 rabbitmq.conf  然后往里面更改一些配置信息,如下:

1995789-20210630003706332-578748508.png

 

logstash部分配置代码:


input {
  rabbitmq {
    host => "127.0.0.1"
    port => 5672
    user => "wesky"
    password => "wesky123"
    queue => "Log1"
    key => "WeskyLog"
    exchange => "WeskyExchange"
    durable => true
  }
}
filter {
  grok {
    match => {"Timestamp" => "%{TIMESTAMP_ISO8601:ctime}"}
    add_field => ["create_time","%{@timestamp}"]
  }
  date {
    match => ["ctime","yyyy-MM-dd HH:mm:ss.SSS","ISO8601"]
    target => "@timestamp"
  }
  mutate {
    remove_field => ["@version","Properties","Timestamp","ctime"]
    rename => {"MessageTemplate" => "message"}
    rename => {"Level" => "level"}
  }
  ruby {
    code => "event.set('create_time',event.get('@timestamp').time.localtime)"
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "log-%{+YYYYMMdd}"
  }
}

 

注意,配置不能使用Tab,必须只能用空格,每个缩进俩空格。


现在写一个测试的webapi,来看看效果。创建一个webapi,记录两条日志,一条是Infomaton,一条是Error

1995789-20210630003905578-428225220.png


现在启动Wsk.Core程序,试着跑一下看看效果:

 1995789-20210630003921511-32132430.png


哦吼,才发现有其他的日志,所以直接打开RabbitMQ,可以看到日志被写入到了MQ里面,而且因为没有消费,所以队列一直在增加。咱们现在启动一下logstash

启动方式如下图,具体地址那些,需要根据自己具体的目录而定:


1995789-20210630003957028-2097553021.png

可以看见,左边的消息,一下子被消费完毕,说明logstash应该是获取到MQ消息了。

现在我们看一下ElasticSearch上面,是否有消息:


1995789-20210630004027168-1096580294.png

 

查询log-20210629,可以看到对应的日志信息,说明写入ES成功。


kibana上面,选择Discover,然后创建一个log的筛选,用于查询所有以log开头到索引:

 1995789-20210630004132744-1532138510.png


刚添加会有点乱,咱们选择只查看create_timelevelmessage字段信息:


1995789-20210630004157905-1057678579.png

显示内容有点乱,debug信息也都记录了,咱们把这部分过滤掉再启动。配置文件里面,修改最小日志级别为Information:

1995789-20210630004220203-2064396968.png

 

再启动程序,查看效果,瞬间清爽~~~

1995789-20210630004234480-1419018422.png


现在通过上面的webapi,写两个日志看看效果:


1995789-20210630004250344-1127013437.png


控制台有信息了,现在去ES上面看下日志信息:


1995789-20210630004309522-684136523.png

 

可以看见日志也有了。现在试一下自带搜索引擎的查询的效果:


1995789-20210630004334780-332635573.png


1995789-20210630004349114-1611215746.png

 

说明查询也是OK的。

 

另外需要注意一点:


我这边索引还是log-20210629,但是实际上已经是2021630日的024分,这个是因为ES默认是0区,咱们中国是东八区,所以会自动少8个小时进行存储。Kibana上面查询的日志时间却正常的,这个是因为Kibana默认会读取浏览器的时区,自动帮我们转换进行显示了。


如果搜索日志时候,发现搜索的是单个字,没有词组那些,那可能是因为没有添加中文分词的原因。添加中文分词以及中文分词插件,可以加群索取哦~~


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
18天前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
63 4
|
1月前
|
消息中间件 监控 Kafka
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
【8月更文挑战第13天】Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
74 3
|
1月前
|
Kubernetes Java 索引
Elasticsearch on K8S 开启慢日志
本文档指导如何在Elasticsearch on PaaS环境中手动配置慢日志。首先通过API设置索引的慢日志阈值,接着创建`log4j2.properties`的ConfigMap以定义日志滚动策略,并修改Elasticsearch配置引入此ConfigMap。最后,通过Kubernetes命令检查Pod内的`logs`目录以查看生成的慢日志文件。需注意,不当配置可能会影响系统性能。[官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/logging.html)提供更多细节。
100 3
|
1月前
|
数据可视化 应用服务中间件 Apache
优化集中式日志记录的方法:添加 Logstash 过滤器
优化集中式日志记录的方法:添加 Logstash 过滤器
19 1
|
1月前
|
消息中间件 Java 调度
"解锁RabbitMQ云版:揭秘电商巨头、日志大师、任务狂人的秘密武器,你的系统升级就差这一步!"
【8月更文挑战第14天】在分布式与微服务架构中,RabbitMQ云版本作为消息队列服务,助力系统间解耦与异步通信。通过三个场景展示其实用性:1) 订单处理系统中,利用RabbitMQ实现跨服务流程的解耦;2) 日志收集与分析,异步发送日志至中央系统,保障业务流畅;3) 任务调度,处理耗时任务避免阻塞主线程。这些应用充分展现了RabbitMQ云版本的强大功能和灵活性。
25 0
|
消息中间件 Linux
centos7 yum快速安装rabbitmq服务
centos7 yum快速安装rabbitmq服务
199 0
|
消息中间件 中间件 微服务
RabbitMQ 入门简介及安装
RabbitMQ 入门简介及安装
110 0
|
消息中间件 Ubuntu Shell
ubuntu安装rabbitmq教程 避坑
ubuntu安装rabbitmq教程 避坑
428 0
|
消息中间件 存储 网络协议
Rabbitmq的安装与使用
Rabbitmq的安装与使用
247 0
|
消息中间件 数据安全/隐私保护 Windows
【MQ】Windows上RabbitMQ的安装与启动
【MQ】Windows上RabbitMQ的安装与启动
394 0

热门文章

最新文章