九、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>
nlog.config配置
复制代码

  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     }
nlog使用
复制代码

  接着配置es全文索引,进入kabana

其中需要设置类型可设置@timestamp 

 最后完成后看看效果

 

posted @   冼润伟  阅读(736)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示