使用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内基本足够了。

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

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

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

以上代码如下:

 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();
});

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

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

设置了两个RouteKey:WeskyLog和WeskyLog2,以及两个队列 Log1和Log2。咱们主要使用WeskyLog和 Log1。

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

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

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:

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

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

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

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

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

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

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

刚添加会有点乱,咱们选择只查看create_time、level和message字段信息:

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

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

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

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

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

说明查询也是OK的。

另外需要注意一点:

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

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

以上就是今天的内容,欢迎各位大佬留下宝贵的意见或建议~~~

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

  1. 三十八、LNMP潮流组合搭建

    一.安装mysql 数据库 1.1  mysql数据库安装的三种方法: 1)编译安装,在lamp经典组合安装是5.1版本,是configure,make,make install,这里如果是5.5版本 ...

  2. Elasticsearch使用系列-Docker搭建Elasticsearch集群

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

  3. Elasticsearch使用系列-ES增删查改基本操作+ik分词

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 一.安装可视化工具Kibana ES是一个NoSql数据库应用.和其他数据库 ...

  4. Elasticsearch使用系列-.NET6对接Elasticsearch

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

  5. Elasticsearch使用系列-基本查询和聚合查询+sql插件

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

  6. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  7. (十)Net Core项目使用Cookies (八)Net Core项目使用Controller之三-入参

    (十)Net Core项目使用Cookies 一.简介 1.Net Core可以直接使用Cookies,但是调用方式有些区别. 2.Net Core将Request和Response分开实现. 二.基 ...

  8. bp(net core)+easyui+efcore实现仓储管理系统——入库管理之二(三十八)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十二(四十八)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. c#操作斑马打印机打印中文

    需要引用fnthex32.dll插件,这个网上就能下到,注意分为两个版本,一个版本是8个参数,一个版本是9个参数,我这里用的是9个参数的. 首先用zebradesigner设计一个打印模板 差不多就长 ...

  2. OO_Unit2_多线程电梯

    CSDN博客链接 一.第一次作业 1.需求分析 单部多线程傻瓜调度(FAFS)电梯 2.实现方案 输入接口解析 类似于Scanner,我们使用ElevatorInput进行阻塞式读取(第一次作业较简单 ...

  3. Kubernetes服务pod的健康检测liveness和readiness详解

    Kubernetes服务pod的健康检测liveness和readiness详解 接下来给大家讲解下在K8S上,我们如果对我们的业务服务进行健康检测. Health Check.restartPoli ...

  4. 重新整理 .net core 实践篇————配置应用[一]

    前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...

  5. 通过Cloudflare开启全站https

    Cloudflare 添加域名后,会自动生成通用证书,快速开启全站HTTPS,服务端不用做任何修改,还可以选择多种开启模式 一.注册Cloudflare账号 直接打开网站:https://www.cl ...

  6. [刷题] 435 Non-overlapping Intervals

    要求 贪心算法与动态规划的关系 给定一组区间,最少删除多少个区间,可以让这些区间之间互相不重叠 给定区间的起始点永远小于终止点 示例 [[1,2],[2,3],[3,4],[1,3]], 返回1 [[ ...

  7. SpringBoot + WebSocket 实现答题对战匹配机制

    概要设计 类似竞技问答游戏:用户随机匹配一名对手,双方同时开始答题,直到双方都完成答题,对局结束.基本的逻辑就是这样,如果有其他需求,可以在其基础上进行扩展 明确了这一点,下面介绍开发思路.为每个用户 ...

  8. 第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难

    第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难 如何做个靠谱的人? 有问有答,任务发送和接收有记录,完成有反馈. 如何实现一个靠谱的协议? TCP 协议使用的也是同样的模式.为了保证顺 ...

  9. Go语言web开发---Cronexpr 包实现并发定时任务

    安装Cronexpr包: go get -u github.com/gorhill/cronexpr 这个包支持七位时间控制 *(秒) *(分) *(时) *(日) *(月) *(周) *(年) 栗子 ...

  10. CUDA C++程序设计模型

    CUDA C++程序设计模型 本章介绍了CUDA编程模型背后的主要概念,概述了它们在C++中的暴露方式.在编程接口中给出了CUDA C++的广泛描述. 使用的矢量加法示例的完整代码可以在矢量加法CUD ...