.Net Core微服务入门——ELK日志中心

Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。

kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

NLog 一个普普通通的.Net日志记录框架,类似log4net的作用。

一、Elasticsearch 安装

1、获取Elasticsearch 镜像

进入https://hub.docker.com/,搜索Elasticsearch ,查看最新版本(7.14.0)

docker pull elasticsearch:7.14.0

2、运行容器

docker run -d --name elasticsearch  -e "discovery.type=single-node"  -v "/home/es":/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.14.0

3、运行成功,查看
在这里插入图片描述
4、浏览器打开访问

http://192.168.8.27:9200/

在这里插入图片描述

常见错误:

1、 cannot read directory ‘/usr/share/elasticsearch/data’: Permission denied

没有目录权限,设置权限:

chown -R root:root /home/es
chmod 777 /home/es

2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

使用下面命令解决:

vi /etc/sysctl.conf

添加 一行

vm.max_map_count=655360

加载参数

sysctl -p

重启

dockerr start esmaster

3、Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

解决方法:
run 命令增加 -e “discovery.type=single-node”

重新run时,需要把/home/es/目录下所有文件清楚,否则会因为文件被lock导致无法运行成功。

二、kibana 安装

1、下载镜像

docker pull kibana:7.14.0

2、运行安装

docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.14.0

3、 打开:
http://192.168.8.27:5601/app/home

在这里插入图片描述
成功!

常见问题:

打开 http://192.168.8.27:5601/app/home,出现 Kibana server is not ready yet

经调查,发现网上很多是这种命令:

docker run -d --name kibana -e ELASTICSEARCH_URL=http://192.168.8.27:9200 -p 5601:5601 kibana:7.14.0

发现根本连不上 Elasticsearch ,注意一定要用 --link

三、安装logstash

1、获取镜像

docker pull logstash:7.14.0

2、安装

docker run -it -d --name=logstash -p 9600:9600 -p 4560:4560 \
 -v /home/logstash/logstash.yml:/usr/share/logstash/logstash.yml \
 -v /home/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.14.0

运行成功!

四、.Net Core 接入ELK

1、修改nlog.config

<?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"
      internalLogToConsole="true">
	<extensions>
		<add assembly="NLog.Targets.ElasticSearch"/>
	</extensions>

	<targets>
		<!--ElasticSearch保存日志信息-->
		<target name="ElasticSearch" xsi:type="ElasticSearch" ConnectionStringName="ElasticSearchServerAddress"
				index="userapi-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true"
					 layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${logger} ${message} ${exception:format=toString}">
			<field name="MachineName" layout="${machinename}" />
			<field name="Time" layout="${longdate}" />
			<field name="level" layout="${level:uppercase=true}" />
			<field name="logger" layout=" ${logger}" />
			<field name="message" layout=" ${message}" />
			<field name="exception" layout=" ${exception:format=toString}" />
			<field name="processid" layout=" ${processid}" />
			<field name="threadname" layout=" ${threadname}" />
			<field name="stacktrace" layout=" ${stacktrace}" />
			<field name="Properties" layout="${machinename} ${longdate} ${level:uppercase=true} ${logger} ${message} ${exception}|${processid}|${stacktrace}|${threadname}" />
		</target>
	</targets>
	<rules>
		<logger name="*" minlevel="INFO" writeTo="ElasticSearch" />
	</rules>
</nlog>

2、appsettings.json 增加配置 ElasticSearchServerAddress

"ConnectionStrings": {
    "ElasticSearchServerAddress": "http://192.168.8.27:9200"
  }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐