ABP 使用ElasticSearch、Kibana、Docker 进行日志收集
ABP 使用ElasticSearch、Kibana、Docker 进行日志收集
后续会根据公司使用的技术,进行技术整理分享,都是干货哦别忘了关注我!!!

最近领导想要我把项目日志进行一个统一收集,因为现在环境有什么报错信息都是看Logs文件夹的日志数据,如果只有一个项目那到无所谓,但是我们现在的服务进行了模块拆分,所以看日志需要一个一个的找不方便,之前我有接触过Seq、ElasticSearch进行日志收集统一查看。
技术点
- ElasticSearch
ElasticSearch 是一个非常适合索引日志和分析数据的开源数据库。
- Kibana
Kibana 是 ElasticSearch 的开源数据可视化用户界面。将 ElasticSearch 视为数据库,将 Kibana 视为 Web 用户界面,您可以使用它在 ElasticSearch 中构建图形和查询数据。
- Serilog
Serilog 是一个用于 ASP.NET Core 的插件,它使日志记录变得容易。Serilog 有多种可用的接收器 - 例如,您可以获得纯文本、SQL 和 ElasticSearch 接收器等等。
为什么用ElasticSearch(当然后面也会介绍Seq)
- 它是免费和开源
基本功能是免费的,大部分都是免费的。如果您需要 Kibana 中的安全和警报功能,您可以购买 Kibana 的商业 X-pack 订阅,也可以安装一些开源替代品。
- RESTful API
查询结果以 JSON 格式返回,这意味着结果易于使用。通过 RESTful API 查询和插入数据意味着可以轻松使用任何编程语言来处理 ElasticSearch。
- 易于查询
ElasticSearch 有一个基于 Apache Lucene 的内置全文搜索引擎。与其他数据库相比,Lucene 易于查询。即使是非技术人员也可以编写常见查询。
- 速度很快 - 非常快
查询大型 SQL 数据库可能需要 10 或 20 秒。大型 ElasticSearch 数据库上的类似查询通常会在 10 毫秒内返回结果。
- 它是可扩展
它很容易扩展。再加上它是开源的,这意味着它在钱包上也很容易。
- 易于设置
只需启动一个包含 ElasticSearch 和 Kibana 容器的 docker compose 文件,您就可以开始记录和搜索了。
Docker搭建Elasticsearch 和 Kibana环境
这里我们使用了docker-compose所以我们需要安装docker-compose然后创建一个 docker-compose.yml 文件。
mkdir -p home/docker/docker-compose
cd home/docker/docker-compose
创建一个名为 docker-compose.yml 的新文件
vi docker-compose.yml
docker-compose.yml文件内容
- 设置es内存,java程序一般很吃内存,根据服务器配置进行调优
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" - kibana汉化(7.0以上版本),根据个人情况决定
- output.i18n.locale="zh-CN"
version: '3.1'
services:
elasticsearch:
container_name: elasticsearch
hostname: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
restart: always
ports:
- 9200:9200
- 9300:9300
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
environment:
- xpack.monitoring.enabled=true
- xpack.watcher.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
kibana:
container_name: kibana
hostname: kibana
image: docker.elastic.co/kibana/kibana:7.9.2
restart: always
ports:
- 5601:5601
depends_on:
- elasticsearch
environment:
- ELASTICSEARCH_URL=http://localhost:9200
volumes:
elasticsearch-data:
运行 docker-compose.yml 文件
容器启动之后需要等待一会,因为初始化需要一段时间
# 构建启动容器 -d 后台运行
docker-compose up -d
# 停止up 命令所启动的容器,并移除网络
docker-compose down
验证环境
- 验证 Elasticsearch 是否已启动并正在运行,我们可以访问
http://localhost:9200(就是我们刚才开放Elasticsearch的9200端口)

- 验证 Kibana 是否已启动并正在运行,我们可以访问
http://localhost:5601(就是我们刚才开放Kibana的5601端口)

使用Abp配合Serilog 记录日志到 Elasticsearch
Serilog 包添加到项目中
- Serilog.AspNetCore
- Serilog.Enrichers.Environment
- Serilog.Sinks.Debug
- Serilog.Sinks.ElasticSearch
- Serilog.Exceptions
appsettings.json 中添加 Serilog 日志和Elasticsearch地址
{
// Serilog 日志配置
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Information",
"System": "Warning"
}
}
},
// Elasticsearch地址
"ElasticConfiguration": {
"Uri": "http://localhost:9200"
},
"AllowedHosts": "*"
}
在 Program.cs 中配置日志记录
接下来,通过添加以下 using 语句在 Program.cs 中配置日志记录:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Sinks.Elasticsearch;
using System;
using System.Reflection;
using Serilog.Exceptions;
接下来,设置 main 方法。我们要做的是在创建主机之前设置日志记录。这样,如果主机无法启动,我们可以记录任何错误。
public static void Main(string[] args)
{
// 配置日志信息
ConfigureLogging();
// 然后创建主机,这样如果主机出现故障,我们就可以记录错误
CreateHost(args);
}
然后,在 program.cs 中添加 ConfigureLogging 和 ElasticsearchSinkOptions 方法
private static void ConfigureLogging()
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile(
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
optional: true)
.Build();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.WithExceptionDetails()
.Enrich.WithMachineName()
.WriteTo.Debug()
.WriteTo.Console()
.WriteTo.Elasticsearch(ConfigureElasticSink(configuration, environment))
.Enrich.WithProperty("Environment", environment)
.ReadFrom.Configuration(configuration)
.CreateLogger();
}
private static ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot configuration, string environment)
{
return new ElasticsearchSinkOptions(new Uri(configuration["ElasticConfiguration:Uri"]))
{
// 自动创建模块
AutoRegisterTemplate = true,
// 创建索引(如果不设置默认就是logstash-2022.03.06这种时间格式的)
IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".", "-")}-{environment?.ToLower().Replace(".", "-")}"
};
}
最后,添加 CreateHost 和 CreateHostBuilder 方法。请注意 CreateHostBuilder 周围的 try/catch 块。
private static void CreateHost(string[] args)
{
try
{
CreateHostBuilder(args).Build().Run();
}
catch (System.Exception ex)
{
Log.Fatal($"Failed to start {Assembly.GetExecutingAssembly().GetName().Name}", ex);
throw;
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureAppConfiguration(configuration =>
{
configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
configuration.AddJsonFile(
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
optional: true);
})
.UseSerilog();
然后运行一次你的程序,让它自动创建好索引信息,后面我们就只需要配置了
kibana配置信息
- 点击进入默认管理空间

- 管理空间配置

Kibana 目前还不会显示任何日志。您必须先指定索引,然后才能查看记录的数据。
这里就可以看到logstash就是我们创建的索引(我之前没有设置索引所以就默认是logstash-2022.03.06)

输入你的索引模式。它将显示刚刚创建的索引模式。您可以键入整个索引,或使用通配符。

在下一页上,选择 @timestamp 字段作为时间过滤器字段名称,然后单击创建索引模式按钮。

您现在可以通过单击导航窗格中的 Discover 链接来查看日志。

我们程序中打出来的日志就会被收集到这里,这里我就不演示怎么写打日志的代码了哈。(刚才上厕所尿劈叉了)

配置日志过期策略
因为我们的日志信息一般都不需要保留很长的时间。
(一般保存3天左右就够了,过期的日志将自动清除,这样也能减少我们日志内存的消耗)

- 记得关掉热阶段的滚动更新
- 开启删除阶段,设置过期时间,快照可以不用

关联索引策略模式

选择我们刚才设置的策略模块,进行关联。(这样我们的日志就会自动释放啦)

ABP 使用ElasticSearch、Kibana、Docker 进行日志收集的更多相关文章
- GlusterFS + lagstash + elasticsearch + kibana 3 + redis日志收集存储系统部署 01
因公司数据安全和分析的需要,故调研了一下 GlusterFS + lagstash + elasticsearch + kibana 3 + redis 整合在一起的日志管理应用: 安装,配置过程,使 ...
- 用ElasticSearch,LogStash,Kibana搭建实时日志收集系统
用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana ...
- logstash+elasticsearch+kibana快速搭建日志平台
使用logstash+elasticsearch+kibana快速搭建日志平台 日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日 ...
- docker容器日志收集方案汇总评价总结
docker日志收集方案有太多,下面截图罗列docker官方给的日志收集方案(详细请转docker官方文档).很多方案都不适合我们下面的系列文章没有说. 经过以下5篇博客的叙述简单说下docker容器 ...
- Nginx filebeat+logstash+Elasticsearch+kibana实现nginx日志图形化展示
filebeat+logstash+Elasticsearch+kibana实现nginx日志图形化展示 by:授客 QQ:1033553122 测试环境 Win7 64 CentOS-7- ...
- 利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案
开发者在面对 kubernetes 分布式集群下的日志需求时,常常会感到头疼,既有容器自身特性的原因,也有现有日志采集工具的桎梏,主要包括: 容器本身特性: 采集目标多:容器本身的特性导致采集目标多, ...
- 使用logstash+elasticsearch+kibana快速搭建日志平台
日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: * 根据关键字查询日志详情 * 监控系统的运行状况 * 统计分析,比如接口的调用次数.执行时间.成功 ...
- lagstash + elasticsearch + kibana 3 + kafka 日志管理系统部署 02
因公司数据安全和分析的需要,故调研了一下 GlusterFS + lagstash + elasticsearch + kibana 3 + redis 整合在一起的日志管理应用: 安装,配置过程,使 ...
- docker容器日志收集方案(方案一 filebeat+本地日志收集)
filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输. docker容器日志默认记录方式为 json-file 就是将日志以json格式记录在磁盘上 格式如下: { " ...
随机推荐
- Jupyter Notebook 更改字体、字体大小、行高
(废话):今天在做实验的时候遇到了一点问题,就问了问本科的室友,结果室友推荐我使用Jupyter Notebook来写代码,以前看其他同学使用过,但是一直在用Pycharm写,需要的时候顶多是Debu ...
- CaCl2 项目介绍。
一 是什么? 中国自然语言处理(NLP)研究项目. 二 主要功能? 从互联网获取的大量文本数据,结合自研力量进行分析.将数据重新格式化为大量条目,目录,并根据金融行业分类标准对这些条目进行了分类. 三 ...
- Javascript之递归求裴波那契数
一.遍历的方式性能更加,递归的方式代码利于阅读.简短,性能略差 二.裴波那契数定义: · 位置0的裴波那契数为0 · 1和2的裴波那契数为1 · n(n > 2)裴波那契数为 (n-1)的裴波那 ...
- 隐式参数arguments
类数组对象中(长得像一个数组,本质上是一个对象):arguments 常见的对arguments的操作是三个 获取参数的长度 arguments.length 根据索引值获取某一个参数 argume ...
- Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明
1. 为什么要使用后缀名为 .d 的依赖文件? 在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件.比如main.c 源文件内容如下: #include "stdio.h& ...
- Android生成xml
XmlSerializer //使用XmlSerializer来序列化xml文件 public static boolean backupSms_android(Context con ...
- 【转】linux shell编程实例总结
查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数 find ./ -size +500M -type f | tee file_list | wc 在目录/tmp下找 ...
- CVE-2021-4034 Linux Polkit本地权限提升漏洞
0x00 前言 公司放假两天,突然一天下午,群里面实验室的大哥发了个通告,就是这个臭名昭著刚爆出来的漏洞.通杀目前市场上大多数Linux操作系统.随后我看到各种微信公众号纷纷发表文章,POC已经出现了 ...
- Typora如何上传图片到gitee
Typora是一款非常好用的Markdown文本编辑器,深受广大程序员的青睐,那么在使用过程中,当我们插入图片的时候,其实是默认放在一个相对路径文件夹下的,这就导致,一旦我们移动文件,或者发送给别人, ...
- Elasticsearch使用系列-.NET6对接Elasticsearch
Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...