1、首先安装elk
ELK是当下流行的日志监控系统。ELK是Elasticsearch、Logstash、Kibana三个软件的统称。
在ELK日志监控系统中,Logstash负责读取和结构化各类日志+发送给Elasticsearch,Elasticsearch负责存储Logstash发送过来的日志+响应Kibana的查询,Kibana负责从Elasticsearch查询内容+在web界面中向用户展示。
安装ELK之前需要先安装java环境,这里就不赘述了
1.1、 安装elasticsearch(安装包方式安装)
第一步、下载elasticsearch的压缩包并解压,然后把解压后的文件夹移动到usr/local中(视个人情况而定,我一般喜欢把一些第三方包放在这个文件夹中)
下载地址: elasticsearch下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.1-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.14.1-linux-x86_64.tar.gz
mv elasticsearch-7.14.0 /usr/local
解压后就这些文件了
第二步、修改elasticsearch配置,进入到config文件夹中,修改elasticsearch.yml文件
vim elasticsearch.yml
找到相应的键值,修改配置为如下
path.data: /usr/local/elasticsearch-7.14.0/data #数据存储路径,改为自己的
path.logs: /usr/local/elasticsearch-7.14.0/logs #日志存储路径,改为自己的
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
第三步:创建elasticsearch用户
注意,root用户是不能直接启动elasticsearch的,需要新建用户,然后切换用户去启动elasticsearch,如下
创建elsearch用户组及elsearch用户
groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch
更改elasticsearch-7.14.0文件夹及内部文件的所属用户及组为elsearch:elsearch
chown -R elsearch:elsearch /usr/local/elasticsearch-7.14.0
切换到elsearch用户再启动
su elsearch
cd /usr/local/elasticsearch-7.14.0/bin
./elasticsearch
至此,elasticsearch配置启动完毕,可以在浏览器输入url: 服务器外网ip:9200 查看是否成功启动:
1.2、kibana安装配置(安装包方式安装)
第一步、下载logstash的压缩包并解压,然后把解压后的文件夹移动到usr/local中(视个人情况而定,我一般喜欢把一些第三方包放在这个文件夹中)
下载地址: kibana下载
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.14.1-linux-x86_64.tar.gz
tar -xzvf kibana-7.14.1-linux-x86_64.tar.gz
mv kibana-7.14.0-linux-x86_64 /usr/local
解压后的文件
第二步、修改kibana配置,进入到config文件夹中,修改kibana.yml文件
vim kibana.yml
找到相应的键值,修改配置为如下
server.host: "0.0.0.0"
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
配置完后进入到bin文件夹进行启动
启动完毕,可以浏览器输入url: 服务器外网ip:5601 查看是否成功启动:
1.3、logstash安装配置(安装包方式安装)
第一步、下载logstash的压缩包并解压,然后把解压后的文件夹移动到usr/local中(视个人情况而定,我一般喜欢把一些第三方包放在这个文件夹中)
下载地址: logstash下载
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.14.1-linux-x86_64.tar.gz
tar -xzvf logstash-7.14.1-linux-x86_64.tar.gz
mv logstash-7.14.0 /usr/local
解压后目录结构大概如下
第二步、配置logstash,进入到config文件夹中
找到logstash.yml配置一些内容,找到相应的键值,修改配置为如下
path.data: /usr/local/logstash-7.14.0/data #数据的路径,设置为自己的路径
http.host: 0.0.0.0
http.port: 9600-9700
然后配置日志的记录,应该会有一个logstash-sample.conf(如果没有可以新建一个 vim logstash-sample.conf,名字无所谓,后面启动时会指定使用改配置文件进行启动 )
vim logstash-sample.conf
写入如下内容:
input {
# 测试使用file方式进行日志的输入
# file{
# path => ["/var/log/logstash/*.log"]
# start_position => "beginning"
# stat_interval => 1
# discover_interval => 15
# }
beats {
port => 5044
}
# 使用tcp的方式进行日志的输入,这边是.Net中写入elk时会使用的链接
tcp{
host => "192.168.233.128"
port => 9601
}
}
filter{
grok{
match => {
"message" => "#%{DATA:request_time}#%{DATA:log_level}#%{DATA:log_info}#"
}
}
}
output {
elasticsearch {
hosts => ["http://192.168.233.128:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
启动logstash:
./logstash -f /usr/local/logstash-7.14.0/config/logstash-sample.conf &
到这里elk的配置已经完成
2、项目配置日志写入elk
项目中引入nlog相关的包,添加使用nlog
2.1、配置nlog写入日志到logstash中
nlog.config配置文件配置,注意配置的address设置为logstash中设置的input =>tcp中的链接地址:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Error"
internalLogFile="log/internalLog.txt"
>
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- sql日志target -->
<!--<target xsi:type="File" name="SqlLog" fileName="${currentdir}/log/sql/${shortdate}.log"
layout="${longdate} ${logger} ${uppercase:${level}}
${newline}${message} ${exception:format=tostring}${newline}" />-->
<!-- Tcp日志target -->
<target xsi:type="Network"
name="ownLog-tcp"
keepConnection="false"
address ="tcp://192.168.233.128:9601/"
layout="${longdate} ${logger} ${uppercase:${level}}
${newline}【请求url】:${aspnet-request-url}
${newline}【输出信息】:${message},【堆栈信息】:${exception: Type, ToString, Method, StackTrace}
${newline}"
/>
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--<logger name="Microsoft.EntityFrameworkCore.Database.*"
writeTo="SqlLog" />-->
<!-- <logger name="*" minlevel="Error" writeTo="ErrorInfo" />-->
<!--测试只控制器中的日志记录到elk中,仅警告级别以上的日志会被写入 -->
<logger name="HxCore.Web.Controllers.*" minlevel="Warning" writeTo="ownLog-tcp" />
</rules>
</nlog>
控制器中添加测试方法
启动程序,调用该方法,这时日志就会被写入到elasticsearch中同时会创建一个logstash-当前时间的索引,可以打开kibana面板进行查看,查看之前先建立一个索引模式来匹配你的索引。
建立索引模式(截图中写错了我logstash中配置的索引是index => “logstash-%{+YYYY.MM.dd}”):
然后进入到kibana面板=》discover标签=》logstash*索引模式查看写入的日志