美文网首页项目面试
技术分享:ELK日志分析方案

技术分享:ELK日志分析方案

作者: 95a6af369245 | 来源:发表于2019-06-14 17:12 被阅读106次

      针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析。

      1.ELK整体方案

      1.1 ELK架构图

      1.2 ELK工作流程

      1.在微服务服务器上部署Logstash,作为Shipper的角色,对微服务日志文件数据进行数据采集,将采集到的数据输出到Redis消息队列。

      2.在另外一台服务器上部署Logstash,作为Indexer的角色,从Redis消息队列中读取数据(可以对数据进行处理),输出到Elasticsearch-Master主节点。

      3.Elasticsearch-Master主节点内部与副节点同步数据。(Elasticsearch集群建议3个服务以上奇数)

      4.Kibana部署一台服务器内,读取Elasticsearch集群数据,展示Web查询页面,提供数据展示。

      2.消息队列选型

      2.1 Redis

      在我这个最终方案中,选择了使用Redis作为消息队列进行缓冲,降低Elasticsearch压力,起到削峰作用,主要原因还是由于公司考虑成本问题,日志收集也是只针对我们单个项目组来使用,所以选择了公司现在就已经有的Redis集群进行复用。

      2.2 Kafka

      最初方案中,在消息队列上选择的是Kafka,毕竟Kafka天生就是做为消息队列的,具体二者的毕竟在这里我就不多说了,百度上一大堆。

      3.安装

      这里就不在这里写出来了,提供三个地址仅供参考:

      Linux安装Logstash

      Linux安装Kibana

      Linux安装Elasticsearch

      4.Logstash配置

      4.1 log2redis

      从日志文件读取到redis

      #从日志文件读取数据

      #file{}

      #type 日志类型

      #path 日志位置

      # 可以直接读取文件(a.log)

      # 可以所有后缀为log的日志(*.log)

      # 读取文件夹下所有文件(路径)

      #start_position 文件读取开始位置 (beginning)

      #sincedb_path 从什么位置读取(设置为/dev/null自动从开始位置读取)

      input {

      file {

      type = log

      path = [/root/logs/info.log]

      start_position = beginning

      sincedb_path = /dev/null

      }

      }

      #根据时间戳分隔日志

      #grok 区分日志中得字段

      filter {

      multiline {

      pattern = ^%{TIMESTAMP_ISO8601}

      negate = true

      what = previous

      }

      #定义数据的格式

      grok {

      match = { message = %{DATA:datetime} - %{DATA:logLevel} - %{DATA:serviceName} - %{DATA:ip} - %{DATA:pid} - %{DATA:thread} - %{DATA-msg}}

      }

      }

      #输出数据到Redis

      #host Redis主机地址

      #port Redis端口

      #db Redis数据库编号

      #data_type Redis数据类型

      #key Redis的key

      #password Redis密码

      output {

      redis {

      host = ip

      port = 6379

      db = 6

      data_type = list

      password = password

      key = test_log

      }

      }

      4.2 redis2es

      从redis读取到es

      #从redis内读取数据

      #host Redis主机ip

      #port Redis端口

      #data_type Redis数据类型

      #batch_count

      #password Redis密码

      #key Redis读取Key

      input {

      redis {

      host = ip

      port = 6379

      db = 6

      data_type = list

      password = password

      key = test_log

      }

      }

      #数据的输出我们指向了es集群

      #hosts Elasticsearch主机地址

      #index Elasticsearch索引名称

      output {

      elasticsearch {

      hosts = ip:9200

      index = logs-%{+YYYY.MM.dd}

      }

      }

      5 其他

      其他剩下的就是Es集群和Kibana了,这两个没什么特别值得注意的地方,上网随便搜,一大堆文章。

      以上仅仅代表本人项目使用方案,不一定完美适合所有场景,仅供参考。

    相关文章

      网友评论

        本文标题:技术分享:ELK日志分析方案

        本文链接:https://www.haomeiwen.com/subject/mlipfctx.html