九、net6下使用elk日志分析系统
一、ELK是什么
1.日志简化分析的管理工具:由Elasticsearch(ES)、Logstash、Kibana三个开源工具组成
ES(nosql非关数据库):存储功能和索引
Logstash(收集日志):到应用服务器上拿取log,并进行格式转换后输出到es中
通过input功能来收集/采集log
filter过滤器:格式化数据
output输出:日志输出到es数据库内
Kibana(展示工具):将es内的数据在浏览器展示出来,通过UI界面展示
2.日志流程:
上面就是一整套我在项目中的elk实现流程
3.Logstash介绍
Logstash由JRuby语言编写,基于消息(message-based) 的简单架构,并运行在Java虚拟机(JVM)上。LogStash可配置单一的代理端(agent) 与其它开源软件结合,以实现不同的功能。
Logstash的理念很简单,它只做3件事情:Collect:数据输入、Enrich:数据加工,1如过滤,改等、Transport:数据输出
二、安装es
下载镜像
docker pull elasticsearch:7.7.0
创建挂载目录
mkdir -p /data/elk/es/{config,data,logs}
赋予权限,docker中elasticsearch的用户UID是1000.
chown -R 1000:1000 /data/elk/es
创建挂载用配置
cd /data/elk/es/config touch elasticsearch.yml -----------------------配置内容---------------------------------- cluster.name: "my-es" network.host: 0.0.0.0 http.port: 9200
运行es
docker run -it -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" --restart=always -v /data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/es/data:/usr/share/elasticsearch/data -v /data/elk/es/logs:/usr/share/elasticsearch/logs elasticsearch:7.7.0
验证是否成功
三、部署kibana
拉取镜像
docker pull kibana:7.7.0
配置文件
vi /data/elk/kibana/kibana.yml
填写内容
#Default Kibana configuration for docker target server.name: kibana server.host: "0" elasticsearch.hosts: ["http://159.75.18.105:9200"] xpack.monitoring.ui.container.elasticsearch.enabled: true
运行kibana
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kibana -p 5601:5601 -v /data/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.7.0
浏览器上输入:http://ip:5601
四、部署logstash
拉取logstash镜像
docker pull logstash:7.7.0
创建yml文件
vi /data/elk/logstash/logstash.yml
输入内容
#path.config: /data/elk/logstash/conf.d/*.conf path.config: /data/docker/logstash/conf.d/*.conf path.logs: /var/log/logstash
创建conf文件
vi /data/elk/logstash/conf.d/testService.conf
文件内容
input{ rabbitmq { host => "10.0.0.14" #RabbitMQ-IP地址 vhost => "/" #虚拟主机 port => 5672 #端口号 user => "guest" #用户名 password => "guest" #密码 queue => "" #队列 durable => true #持久化跟队列配置一致 codec => "plain" #格式 exchange=>"testService" #交换机信息 exchange_type=>"topic" #交换机类型 key=>"testServiceKey" #路由键 } } output{ elasticsearch{ hosts=>["http://10.0.0.14:9200"] index => "testServicelog" document_id=>"%{@timestamp}" } }
运行
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /data/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /data/elk/logstash/conf.d/:/data/docker/logstash/conf.d/ logstash:7.7.0
主要注意:如果安装失败可以查看日志报错,还要注意conf文件格式,如果格式有问题则无法运行
docker logs --tail=1000 logstash //查看日志
五、部署rabbitmq
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management
安装完毕后可浏览器输入
安装完毕后查看所有容器是否正常启动
六、net6使用elk
依赖
NLog
Nlog.RabbitMQ.Target
NLog.Web.AspNetCore
配置Program.cs,插入以下一行
builder.Logging.AddNLog("nlog.config");
配置nlog.config文件

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:haf="https://github.com/haf/NLog.RabbitMQ/raw/master/src/schemas/NLog.RabbitMQ.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogToConsole="true"> <extensions> <add assembly="Nlog.RabbitMQ.Target" /> </extensions> <targets> <!-- when http://nlog.codeplex.com/workitem/6491 is fixed, then xsi:type="haf:RabbitMQ" instead; these are the defaults (except 'topic' and 'appid'): --> <target name="RabbitMQTarget" xsi:type="RabbitMQ" username="guest" password="guest" hostname="159.75.18.105" port="5672" exchange="testService-log" exchangeType="topic" topic="testService-Key" vhost="/" durable="true" layout="${longdate}|${level:uppercase=true}|${logger}|${message}" UseLayoutAsMessage="true" /> </targets> <rules> <logger name="*" level="Info,Error" writeTo="RabbitMQTarget"/> </rules> </nlog>
controolers使用说明

1 [ApiController] 2 [Route("[controller]")] 3 public class WeatherForecastController : ControllerBase 4 { 5 6 7 private readonly ILogger<WeatherForecastController> _logger; 8 9 public WeatherForecastController(ILogger<WeatherForecastController> logger) 10 { 11 _logger = logger; 12 } 13 14 [HttpGet] 15 public IEnumerable<WeatherForecast> Get() 16 { 17 _logger.LogInformation("测试的错误123");//这里会直接传给mq,然后由Logstash消费及传输给es 18 return Enumerable.Range(1, 5).Select(index => new WeatherForecast 19 { 20 Date = DateTime.Now.AddDays(index), 21 TemperatureC = Random.Shared.Next(-20, 55) 22 }) 23 .ToArray(); 24 } 25 }
接着配置es全文索引,进入kabana
其中需要设置类型可设置@timestamp
最后完成后看看效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)