在现代化的软件开发流程中,日志显得非常的重要,不可能再零散的游离在各个项目中,等查看日志的时候再登录服务器去到特定的目录去查看,这显然很繁琐且效率低下,所以整合一套日志管理平台,也显得非常重要。
这篇文章是日志管理平台搭建的第一篇,第二篇为告警及邮件通知
环境要求:CentOS Release: 7.5.1804
ELK版本:6.3.1 为方便下载我打包在百度网盘,点击可直接下载
安装
1、Elasticsearch 解压后上传到服务器,直接用rpm命令安装即可,如运行如下命令安装elasticsearch
rpm -ivh ./elasticsearch-6.3.1.rpm
systemctl status elasticsearch.service
,可查看当前运行的状态,如图所示,状态为active 说明我们的elasticsearch 服务已经启动。

在浏览器输入http://192.168.1.215:9200,查看返回结果,说明elasticsearch服务已经成功运行。
2Logstash
安装logstash比较简单,在命令行运行rpm -ivh ./logstash-6.3.1.rpm,等命令执行完成后,输入systemctl status logstash.service 查看服务状态如下图所示,即表示logstash服务已经运行。

Kibana
最后,我们安装kibana,在解压目录下运行
rpm -ivh ./kibana-6.3.1-x86_64.rpm
命令,等命令执行完后,输入
systemctl status kibana.service
,输出如下图所示,

说明kibana服务已经启动,我们在浏览器输入http://192.168.1.215:5601来验证下,如果不出意外,应该显示如下所示

a) 如果遇到出现端口号被占中的情况,用netstat命令查看被哪个进程占中,杀掉即可,也可以在配置文件修改端口,ELK默认端口:Elasticsearch:9200,Kibana:5601
b) 打开kibana,如果提示认证提示,则修改下kibana的配置文件,默认路径在/etc/kibana/kibana.yml,添加如下设置 xpack.security.enabled: false即可。
日志接入
1、Java
a) 在添加logstash包
- <dependency>
- <groupId>net.logstash.logback</groupId>
- <artifactId>logstash-logback-encoder</artifactId>
- <version>5.1</version>
- </dependency>
- <appender name="logstash"
- class="net.logstash.logback.appender.LogstashTcpSocketAppender">
- <destination>xxx.xxx.xxx.xxx:xxxx</destination>
- <queueSize>1048576</queueSize>
- <!-- encoder必须配置,有多种可选 -->
- <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
- <customFields>{"appname":"${Application_Name}"}</customFields>
- </encoder>
- <connectionStrategy>
- <roundRobin>
- <connectionTTL>5 minutes</connectionTTL>
- </roundRobin>
- </connectionStrategy>
- </appender>
c) Root配置
- <springProfile name="log">
- <root level="debug"><appender-ref ref="logstash" /></root>
- </springProfile>
- input {
- tcp {
- ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9601端口接收logback发出的消息
- host => "0.0.0.0"
- #模式选择为server
- mode => "server"
- port => xxxx
- ##格式json
- codec => "json"
- type => "server"
- }
-
- }
-
- output {
- if[type]=="server"{
- elasticsearch {
- action => "index"
- #ES地址
- hosts => "192.168.1.215"
- #指定索引名字,不适用默认的,用来区分各个项目
- index => "%{[appname]}-%{+YYYY.MM.dd}"
- }
- }
- }
e) 需要注意点
i. Logstash监听的端口号要与日志配置的端口号一致
ii. 防火墙要放开监听的端口,测试环境也可以把防火墙关闭
a) 添加 NLog.Targets.ElasticSearch 程序包
b) 编辑Nlog.config
- <extensions>
-
- <add assembly="NLog.Targets.ElasticSearch"/>
-
- </extensions>
-
- <target xsi:type="ElasticSearch"
-
- name="ElasticLog"
-
- uri="http://192.168.1.215:9200"
-
- index="nlog-${date:format=yyyy.MM.dd}"
-
- documentType="logevent"
-
- includeAllProperties="true">
-
- <field name="private" layout="${assembly-version}" />
-
- </target>
-
- <rules>
-
- <logger name="Kibana" minlevel="Info" writeTo="ElasticLog"/>
-
- </rules>
c) 添加日志
i. 帮助 Utils
- public class LogHelper
-
- {
-
- private static Logger logger;
-
- private static string logRuleName = "Kibana";
-
- static LogHelper()
-
- {
-
- logger = LogManager.GetLogger(logRuleName);
-
- logger.LoggerReconfigured += logger_LoggerReconfigured;
-
- }
-
-
-
- static void logger_LoggerReconfigured(object sender, System.EventArgs e)
-
- {
-
- logger = LogManager.GetLogger(logRuleName);
-
- }
-
-
-
- public static void WirtError(string message)
-
- {
-
- logger.Log(LogLevel.Error, message);
-
- }
-
-
-
- public static void WirtDebug(string message)
-
- {
-
- logger.Log(LogLevel.Debug, message);
-
- }
-
- }
d) 记录日志
LogHelper.WirtError("elk log info");
到这里elk搭建及java&net使用就完成了,下一篇主要介绍跟钉钉告警及邮件通知