• 基础架构之日志管理平台搭建及java&net使用


    在现代化的软件开发流程中,日志显得非常的重要,不可能再零散的游离在各个项目中,等查看日志的时候再登录服务器去到特定的目录去查看,这显然很繁琐且效率低下,所以整合一套日志管理平台,也显得非常重要。

     这篇文章是日志管理平台搭建的第一篇,第二篇为告警及邮件通知

    环境要求: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来验证下,如果不出意外,应该显示如下所示

        

    1. 安装遇到的问题

        a)      如果遇到出现端口号被占中的情况,用netstat命令查看被哪个进程占中,杀掉即可,也可以在配置文件修改端口,ELK默认端口:Elasticsearch:9200,Kibana:5601

        b)      打开kibana,如果提示认证提示,则修改下kibana的配置文件,默认路径在/etc/kibana/kibana.yml,添加如下设置 xpack.security.enabled: false即可。

    日志接入

    1、Java

      a)      在添加logstash包

    1. <dependency>
    2. <groupId>net.logstash.logback</groupId>
    3. <artifactId>logstash-logback-encoder</artifactId>
    4. <version>5.1</version>
    5. </dependency>

          b)      日志配置信息

       

    1. <appender name="logstash"
    2. class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    3. <destination>xxx.xxx.xxx.xxx:xxxx</destination>
    4. <queueSize>1048576</queueSize>
    5. <!-- encoder必须配置,有多种可选 -->
    6. <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
    7. <customFields>{"appname":"${Application_Name}"}</customFields>
    8. </encoder>
    9. <connectionStrategy>
    10. <roundRobin>
    11. <connectionTTL>5 minutes</connectionTTL>
    12. </roundRobin>
    13. </connectionStrategy>
    14. </appender>

            c)      Root配置

    1. <springProfile name="log">
    2. <root level="debug"><appender-ref ref="logstash" /></root>
    3. </springProfile>

    d)      在logstash的配置文件路径,默认为/etc/logstash/conf.d添加文件biz_es.conf,文件名称可以自己根据实际需求修改。

    1. input {
    2. tcp {
    3. ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9601端口接收logback发出的消息
    4. host => "0.0.0.0"
    5. #模式选择为server
    6. mode => "server"
    7. port => xxxx
    8. ##格式json
    9. codec => "json"
    10. type => "server"
    11. }
    12. }
    13. output {
    14. if[type]=="server"{
    15. elasticsearch {
    16. action => "index"
    17. #ES地址
    18. hosts => "192.168.1.215"
    19. #指定索引名字,不适用默认的,用来区分各个项目
    20. index => "%{[appname]}-%{+YYYY.MM.dd}"
    21. }
    22. }
    23. }

      e)      需要注意点

                   i.          Logstash监听的端口号要与日志配置的端口号一致

                  ii.          防火墙要放开监听的端口,测试环境也可以把防火墙关闭

    2. Net

    a)      添加 NLog.Targets.ElasticSearch 程序包

    b)      编辑Nlog.config

    1. <extensions>
    2. <add assembly="NLog.Targets.ElasticSearch"/>
    3. </extensions>
    4. <target xsi:type="ElasticSearch"
    5. name="ElasticLog"
    6. uri="http://192.168.1.215:9200"
    7. index="nlog-${date:format=yyyy.MM.dd}"
    8. documentType="logevent"
    9. includeAllProperties="true">
    10. <field name="private" layout="${assembly-version}" />
    11. </target>
    12. <rules>
    13. <logger name="Kibana" minlevel="Info" writeTo="ElasticLog"/>
    14. </rules>

    c)      添加日志

           i.          帮助 Utils

    1. public class LogHelper
    2. {
    3. private static Logger logger;
    4. private static string logRuleName = "Kibana";
    5. static LogHelper()
    6. {
    7. logger = LogManager.GetLogger(logRuleName);
    8. logger.LoggerReconfigured += logger_LoggerReconfigured;
    9. }
    10. static void logger_LoggerReconfigured(object sender, System.EventArgs e)
    11. {
    12. logger = LogManager.GetLogger(logRuleName);
    13. }
    14. public static void WirtError(string message)
    15. {
    16. logger.Log(LogLevel.Error, message);
    17. }
    18. public static void WirtDebug(string message)
    19. {
    20. logger.Log(LogLevel.Debug, message);
    21. }
    22. }

    d)      记录日志

      LogHelper.WirtError("elk log info");

    到这里elk搭建及java&net使用就完成了,下一篇主要介绍跟钉钉告警及邮件通知

    欢迎沟通及共同进步
    QQ:1441299
    Email:1441299@qq.com

    喜欢的朋友记得给个关注~


    欢迎沟通及共同进步
    QQ:1441299
    Email:1441299@qq.com

    越折腾越快乐!

  • 相关阅读:
    Java如何对一个对象进行深拷贝?
    java 实现删除单链表中所有指定的结点以及如何清空单链表
    Ubuntu安装docker,并换镜像源详细教程,建议收藏
    [AGC057D] Sum Avoidance
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver报错
    Qt自定义Widget实现互斥效果问题
    K8S资源对象:StatefulSet简介
    PaddleClas学习1——使用PPLCNet模型对车辆属性进行识别(python)
    java计算机毕业设计交通规则考试系统源码+mysql数据库+系统+lw文档+部署 - 副本
    【连通性的初步分析】
  • 原文地址:https://blog.csdn.net/lzh_boy/article/details/125593936