前言
ELK 是什么
它是一个分布式日志解决方案, 是 Logstash,Elastaicsearch,Kibana 的缩写, 可用于从不同的服务中收集日志后进行处理和分析, 通过 Kibana 可以全方面的展示收集后的信息, 比如通过图表或者表格形式.
能用来做什么
(一)ELK 组件在海量日志系统的运维中, 可用于解决:
分布式日志数据集中式查询和管理
系统监控, 包含系统硬件和应用各个组件的监控
故障排查
安全信息和事件管理
报表功能
(二)ELK 组件在大数据运维系统中, 主要可解决的问题如下:
日志查询, 问题排查, 上线检查
服务器监控, 应用监控, 错误报警, Bug 管理
性能分析, 用户行为分析, 安全漏洞分析, 时间管理
安装前准备
我的系统环境是 CentOS Linux release 7.6.1810 (Core)
安装 Git(用于下载下文提到的 GitHub 项目, 你也可以用 curl, 但项目更新比较快用 Git 方便更新)
安装 Docker(下面项目将部署到 Docker 中)
安装 Docker-Compose(文章会用 DC 进行服务构建)
好了, 万事具备, 只欠东风.
懒人安装
ELK 的安装比较繁琐, 网上的教程也基本都是一个个下载之后再进行安装和配置. 逛了一圈 gayhub 找到了 docker 安装部署的懒人方式这是项目地址 https://github.com/deviantony/docker-elk
首先在你的根目录新建一个文件夹就叫 elk, 然后通过 Git 命令下载项目到该目录下, 进入到该目录下你可以看到这样的目录结构
- [root@localhost docker-elk]# ls
- docker-compose.YAML docker-stack.YAML Elasticsearch extensions filebeat kibana LICENSE logstash README.md
运行命令进行服务构建, 记住一定要加个 d, 不然退出终端服务就停了, 这个过程有点漫长, 毕竟装的东西有点多
[root@localhost docker-elk]# docker-compose up -d
装完后他会默认打开以下这些端口
- 5000: Logstash TCP input(Logstash 数据的接收通道)
- 9200: Elasticsearch HTTP(ES 的 http 通道)
- 9300: Elasticsearch TCP transport(ES 的 TCP 通道)
- 5601: Kibana(UI 管理界面)
这几个服务对应的关系如下图, 应用程序将日志推送给 Logstash, 然后放到 ES 进行存储, 最后通过 Kibana 进行数据展示
当然了 logstash 也有很多对应的插件 beats 用来收集不同的日志, 在高并发的情况下你也可以通过使用 Redis 或者 kafka 作为中间件进行过渡, 就像下面的架构图一样
在安装完成后我们用浏览器打开下面两个地址, 这里会提示你输入用户名和密码:
- user: elastic
- password: changeme
这是默认的稍后和大家说下如何修改密码
http://127.0.0.1:9200/ 打开可以看到 ES 的一些版本信息等
http://127.0.0.1:5601/ 打开后就是 Kibana 的界面, 如果 ES 没有启动完成的话会提示你未找到 ES 数据源
好了, 安装运行已经全部结束, 是不是非常简单, 比起网上那些长篇大论讲安装的, 这里其实就两步: 下载和运行 dc 文件
.NetCore 使用 Nlog 进行日志收集
首先在你的项目中用 Nuget 安装以下两个类库
NLog.Extensions.Logging 和 NLog.web.AspNetCore
然后新建 NLog 的配置文件 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"
- autoReload="true"
- internalLogLevel="Warn"
- internalLogFile="internal-nlog.txt">
- <extensions>
- <add assembly="NLog.Web.AspNetCore"/>
- </extensions>
- <variable name="logDirectory" value="${basedir}\logs\"/>
- <!--define various log targets-->
- <targets>
- <!--write logs to file-->
- <!--address 填写 Logstash 数据的接收通道 -->
- <target xsi:type="Network"
- name="elastic"
- keepConnection="false"
- address ="tcp://127.0.0.1:5000"
- layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
- />
- <target xsi:type="Null" name="blackhole" />
- </targets>
- <rules>
- <!--All logs, including from Microsoft-->
- <logger name="*" minlevel="Trace" writeTo="allfile" />
- <!--Skip Microsoft logs and so log only own logs-->
- <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
- <logger name="*" minlevel="Trace" writeTo="elastic" />
- </rules>
- </nlog>
然后在 Startup>Configure 中引入 Nlog
- public void Configure(IApplicationBuilder App, IHostingEnvironment env, ILoggerFactory loggerFactory)
- {
- LogManager.LoadConfiguration("Nlog.config");// 引入配置文件
- loggerFactory.AddNLog();// 注入 Nlog
- }
接下来在自己项目是进行一个简单的测试
- Logger log = NLog.LogManager.GetCurrentClassLogger();
- log.Debug("测试日志内容");
Kibana 中配置对刚才的日志进行分析
Kibana 必须要先有数据后才能对数据进行展示, 所以我们必须要有上面的测试数据, 然后配置索引进行数据查看
登录进来后左边随机点一个菜单来到如下界面
点击 Create index pattern 来到如下界面, 这里就是配置你要展现 ES 中哪个索引下的内容, 这里 nci-bids-log-2019xxx 这是 logstash 生成的, 你们的可能叫 logstash-2019xxxx, 我的索引在配置中被我重命名了一下方便区分项目
通过名称来进行模糊匹配, 匹配规则貌似就是正则, 匹配成功会提示如下信息, 然后点击 Next-Step
这里让你选择一个时间字段, 就选择 @timestamp 然后下一步结束创建, 然后点击左边第一个菜单就能看到图表和详细信息了
其它的功能自己摸索吧
配置
ELK 的配置文件都是以 Volume 的方式来挂载的, 对应每个文件夹下面的 Configs 里面.
比如 logstash 的配置文件 cd logstash/config 下面的 logstash.YAML 就是他的配置文件.
对了这里使用的版本需要密码是因为 es 使用了一个商业版, 有效期是 30 天, 如果不想使用这个的话可以去 es 的配置目录把 xpack 的配置改成如下就可以:
- xpack.license.self_generated.type: basic
- xpack.security.enabled: false
- xpack.monitoring.collection.enabled: false
后面有空和大家再分享下通过 kafka 作为中间件的方式以及具体的一些配置内容
来源: https://www.cnblogs.com/ShaoJianan/p/11455250.html