• log4net+Kafka+ELK日志系统


    日志是每个系统最为头疼的地方,杂乱,还多,没有还不行,想管理好的话,得经得起考验,要解决的问题总结如下:

    (1)高并发

    (2)高吞吐量

    (3)支持分布式集群

    (4)检索要快

    简介:

    1.Zoomkeeper

    Kafka的通道

    2. Kafka

    Kafka主要是解决大量日志的处理的分布式发布订阅消息系统,拥有高吞吐量,相比Redis而言,可能存在数据丢失的情况,速度更快,仅支持topic模式,更适合做日志系统

    3.Logstash

    Logstash是一个写入工具,可以说是一个桥梁,实现将kafka的consumer端和Elasticsearch数据连通有很大作用,另外也可以将文件写入到Elasticsearch中,还可以将历史的日志也转存到Elasticsearch中,还是个多功能的工具,官方最新版本中已经默认支持了对Kafka和Elasticsearch的配置

    4.Elasticsearch

    Elasticsearch是可以分布式集群部署的全文搜索引擎服务器(NoSQL数据存储),既拥有Lucene的全文检索功能,同时还能进行分布式储存,检索速度快,与Hadoop联合作数据分析,稳健性高,可以在一个集群宕机后,使用备用集群,一样可以工作,缺点:需要足够的内存和CPU资源

    5.Kibana

    Kibana主要用于对Elasticsearch数据的展示和分析

    方案:

    我们可以增加一个log4net kafkaappender 日志生产者通过这个appender将日志写入kafka,由于kafka批量提交、压缩的特性,因此对我们的应用服务器性能的开支很小。日志消费者端使用logstash订阅kafka中的消息,传送到elasticsearch中,通过kibana展示给我们。同时我们也可以通过kibana对我们的日志进行统计分析等。刚好可以解决我们上面的一些问题,流程图如下

    实施与部署:

    1.安装Java SDK

    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    环境变量如下:

    classpath=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar

    JAVA_HOME=D:Javajdk1.8.0_202

    Path += %JAVA_HOME%in

    Java命令:

    Java -version

    Javac -version

    注意:由于Elasticsearch要求Java SDK版本较高,所有要装JDK8级以上版本

    2.安装kafka

    下载地址:http://kafka.apache.org/downloads

    安装Zookeeper windows服务

    1、先解压好nssm这软件,然后进入 D:
    ssm-2.24win64>
    2、.
    ssm install 会弹出一个nssm service installer
    3、application path :D:kafka_2.11-1.1.1inwindowszookeeper-server-start.bat
    4、startup directory : D:kafka_2.11-1.1.1inwindows 上面选择后会自动选择出来
    5、服务名称Zookeeper

    安装Kafka windows服务

    1、先解压好nssm这软件,然后进入 D:
    ssm-2.24win64>
    2、.
    ssm install 会弹出一个nssm service installer
    3、application path :D:kafka_2.11-1.1.1inwindowskafka-server-start.bat
    4、startup directory : D:kafka_2.11-1.1.1inwindows 上面选择后会自动选择出来
    5、Arguments: D:kafka_2.11-1.0.1configserver.properties
    6、Dependencies:Zookeeper 7、服务名称kafka

    注意:由于最新的kafka中已经内置了Zookeeper,所以不用再去单独下载

     安装Logstash

    下载地址:https://www.elastic.co/cn/downloads/past-releases/logstash-6-7-1

    安装为windows服务

    1、先解压好nssm这软件,然后进入 D:
    ssm-2.24win64>
    2、.
    ssm install 会弹出一个nssm service installer
    3、application path :D:Logstashlogstash-6.7.1inlogstash.bat
    4、startup directory :D:Logstashlogstash-6.7.1in
    5、服务名称Logstash

    打开解压目录下logstash.conf文件,配置如下:

    input {
      kafka {
        bootstrap_servers => ["192.168.1.240:9092"]
        group_id => "logstash"
        auto_offset_reset => "latest"
        topics => ["test"]
        #codec => plain{ charset => "GBK" }
        consumer_threads => 5
        decorate_events => true
      }
    }
    filter {
     
    }
    output {
      elasticsearch {
        hosts => ["http://127.0.0.1:9200"]
        index => "chienkun_log"
        codec => plain {
            charset => "UTF-16BE"
          }
      }
    }

    注意:bootstrap_servers 为kafka地址,需要在Kafka配置文件server.properties中将advertised.listeners=PLAINTEXT://192.168.1.240:9092,另外,编码方式考虑到会有中文,要使用UTF-16BE编码,以防乱码

    安装Elasticsearch 

    下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-7-1

    安装为windows服务

    1、先解压好nssm这软件,然后进入 D:
    ssm-2.24win64>
    2、.
    ssm install 会弹出一个nssm service installer
    3、application path :D:Elasticsearchelasticsearch-6.7.1inelasticsearch-service.bat
    4、startup directory :D:Elasticsearchelasticsearch-6.7.1in
    5、服务名称Elasticsearch

     打开配置文件elasticsearch.yml,增加如下配置:

    # 禁用机器学习
    xpack.ml.enabled: false

    安装Kibana

    下载地址:https://www.elastic.co/cn/downloads/past-releases/kibana-6-7-1

    安装为windows服务

    1、先解压好nssm这软件,然后进入 D:
    ssm-2.24win64>
    2、.
    ssm install 会弹出一个nssm service installer
    3、application path :D:kibanakibana-6.7.1-windows-x86_64inkibana.bat
    4、startup directory :D:kibanakibana-6.7.1-windows-x86_64in
    5、服务名称Kibana

    打开配置文件Kibana.yml,修改配置如下

    i18n.locale: "zh-CN"

    log4net

    解决方案右键->管理解决方案的NuGet程序包,搜索log4net.Kafka.Appender,然后安装到解决方案中

    添加log4net配置文件log4net.config,添加配置如下

    <log4net>
      <appender name="KafkaAppender" type="log4net.Kafka.KafkaAppender, log4net.Kafka">
        <KafkaSettings>
          <brokers>
            <add value="192.168.1.240:9092" />
          </brokers>
          <topic type="log4net.Layout.PatternLayout">
            <conversionPattern value="kafka.logstash.DEBUG" />
          </topic>
          <partition type="log4net.Layout.PatternLayout">
            <conversionPattern value="kafka.logstash.DEBUG" />
          </partition>
          <configurations>
            <add key="HashPartitionEnabled" value="true" />
            <add key="MaxPartition" value="100" />
          </configurations>
        </KafkaSettings>
        <layout type="log4net.Kafka.LogstashLayout,log4net.Kafka" >
          <app value="erp.logs" />
        </layout>
      </appender>
      <root>
        <level value="DEBUG"/>
        <appender-ref ref="KafkaAppender" />
      </root>
    </log4net>

    打开Global.asax,在Application_Start中添加如下代码

    log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));

    测试:

    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                GlobalContext.Properties["component"] = "send";
    
                for (int i = 0; i < 100; i++)
                {
                    Thread thread = new Thread(new ThreadStart(() =>
                    {
                        try
                        {
                            while (true)
                            {
                                string name = "我的消息," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                                Console.WriteLine("这是" + Thread.CurrentThread.Name + "发送的消息:" + name);
                                logger.Debug(name);
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            return;
                        }
                    }))
                    {
                        Name = "线程:" + i,
                        IsBackground = true
                    };
    
                    thread.Start();
                }
    
                Console.ReadKey();
            }
        }
    }

     打开地址 http://192.168.1.240:5601

     最后可以看到日志已成功展示

    总结:

    部署过程中,还有很多坑,自己躺过就知道了。

  • 相关阅读:
    novell.directory.ldap获取邮箱活动目录
    xamarin.android 资源图片问题
    xamarin.android 消息推送功能--极光推送
    xamarin.IOS App闪退日志----crash
    xamarin android 获取根证书代码
    xamarin.android pullToRefresharp.Android下拉刷新样式、侧滑删除功能
    数字证书链验证
    xamarin DependencyService源码阅读
    xamarin android ListView手动分组
    xamarin android,UWP 网络类型和IP地址
  • 原文地址:https://www.cnblogs.com/Zyj12/p/12658192.html
Copyright © 2020-2023  润新知