ELK日志管理平台监控nginx/tomcat/docker日志

  • 啰嗦
  • 背景介绍
  • 解决方案
  • 软件介绍
  • 监控目标
  • 实现原理图
  • 需要软件工具和环境
  • 安装
  • elasticsearch安装配置
  • logstash安装配置
  • kibana安装配置
  • 总结


啰嗦

随便看了一眼自己的博客,已经很久没有更新了。由于工作些许(懒)有(癌)点(晚)忙(期),所以一直没有在写。看着孤零零的几篇文件太过于单调了,所以以后争取每周上一点新东西。

背景介绍

基于平台化的产品,项目越来越多,导致日志管理越来越麻烦,一两个项目还好管理,运维或者开发需要日志了可以直接拉取,便于分析问题。但是越来越多的项目,分布在不同的服务器,不同的tomcat,不同的日志目录下的时候。获取日志就变得力不从心,每次都要去找这个项目的日志名称是什么,在那个服务器中(心好累)

解决方案

基于我们的需求,目前开源的软件ELK可以很好地完成日志的收集、整理、展示。这篇文章用最简单的方法搭建日志管理平台(ElasticSearch + Logstash + Kibana),后面有时间,我会在写一篇更合理的日志管理平台(filebeat + kafka +ElasticSearch + Logstash + Kibana),逐步完善日志管理平台。

软件介绍

  1. ElasticSearch:是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 在elasticsearch中,所有节点的数据是均等的。
  2. Logstash:是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
  3. Kibana :是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

监控目标

主要监控一些最常用的日志,例如:nginx日志、tomcat日志、docker日志等等

实现原理图

docker search nginx 查看版本号 docker查看nginx日志_elasticsearch

需要软件工具和环境

  1. Ubuntu 14.0.4
  2. elasticsearch-7.1.1.tar.gz
  3. kibana-7.1.1-linux-x86_64.tar.gz
  4. logstash-7.1.1.tar.gz
  5. ELK下载地址

安装

elasticsearch安装配置

  1. 首先解压elasticsearch-7.1.1.tar.gz
    tar -zxvf elasticsearch-7.1.1.tar.gz
  2. config/elasticsearch.yml配置文件,一般默认IP:0.0.0.0,端口9200,没有特殊需求的可以不用改。(如果es启动访问不了的,可以把IP改成本机的ip试试)
  3. 启动elasticsearch(启动该软件不能使用root用户,需要普通用户,可以新建普通用户,将 目录的权限都赋予给该新用户)
  4. 创建命令:在linux命令行执行
    useradd es
    passwd es
    123456
    es/123456
  5. 切换成es用户启动elasticsearch
    在/usr/local/elasticsearch-7.1.1路径下执行 nohup bin/elasticsearch & (后台执行)或者 bin/elasticsearch
    项目启动成功可以用浏览器查看
  6. docker search nginx 查看版本号 docker查看nginx日志_elasticsearch_02

  7. 遇到的安装问题
  1. http://ip:9200/ 无法访问
    解决方法:vim config/elasticsearch.yml 增加network.host: 0.0.0.0
  2. ERROR: [5] bootstrap checks failed
    [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
    [2]: max number of threads [1024] for user [es] is too low, increase to at least [4096]
    [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    解决方法:1. vi /etc/security/limits.conf
    添加或者修改
    soft nofile 65536
    hard nofile 65536
    2. vi /etc/sysctl.conf
    添加 vm.max_map_count=655360
    3. 保存后执行
    sysctl -p

logstash安装配置

  1. 首先解压logstash-7.1.1.tar.gz
  2. 编辑你自己的安装目录/usr/local/logstash-7.1.1/config下的logstash-sample.conf文件,input中输入
// An highlighted block
file {
        path => ["/logs/pCredit.log","/logs/bizPCredit.log","/logs/pCredit.log.*","/logs/bizPCredit.log.*"]
        start_position => "beginning"
        type => "pcredit"
        codec => json {
            charset => "UTF-8"
        }
     }

   file {
        path => ["/logs/mobileFinance.log"]
        start_position => "beginning"
        type => "mobileFinance"
        codec => json {
            charset => "UTF-8"
        }
     }

    file {
        path => ["/var/log/nginx/*.log"]
        start_position => "beginning"
        type => "nginx"
        codec => json {
            charset => "UTF-8"
        }
     }

    file {
        path => ["/var/lib/docker/containers/*/*.log"]
        start_position => "beginning"
        type => "order"
        codec => json {
            charset => "UTF-8"
        }
     }

filter中输入

// An highlighted block
 date {
         match => [ "timestamp" , "YYYY-MM-dd HH:mm:ss" ]
      }

output中输入

// An highlighted block
  if "_grokparsefailure" in [tags] {
      }else{
       if [type] == "pcredit"{
          elasticsearch {
          hosts => ["http://localhost:9200"]
          index => "pcredit"
          user => "elastic"
          password => "changeme"
        }
       }

       if [type] == "mobileFinance"{
          elasticsearch {
          hosts => ["http://localhost:9200"]
          index => "mobilefinance"
          user => "elastic"
          password => "changeme"
        }
       }

      if [type] == "nginx"{
          elasticsearch {
          hosts => ["http://localhost:9200"]
          index => "nginx"
          user => "elastic"
          password => "changeme"
        }
       }

      if [type] == "order"{
          elasticsearch {
          hosts => ["http://localhost:9200"]
          index => "order"
          user => "elastic"
          password => "changeme"
        }
       }

      stdout {
          codec => rubydebug
       }
  1. 启动logstash:使用root用户,路径/usr/local/logstash-7.1.1/
    命令: nohup bin/logstash &(后台运行) 或者 bin/logstash

kibana安装配置

  1. 首先解压kibana-7.1.1.tar.gz
  2. 查看kibana配置/usr/local/kibana-7.1.1-linux-x86_64/config/
  3. docker search nginx 查看版本号 docker查看nginx日志_nginx_03

  4. 启动kibana:路径/usr/local/kibana-7.1.1-linux-x86_64/
    nohup bin/kibana & 或者 bin/kibana
  5. docker search nginx 查看版本号 docker查看nginx日志_nginx_04

  6. 这里我的路径是用nginx映射出来的,kibana最新的版本已经没有登录管理了,所以要在nginx中配置权限管理,权限管理我们下一章中来讲。
    大家也可以参考这个文章:Kibana设置登录认证
1. 2.  curl -X PUT ‘localhost:9200/order/person/1’ -d ’
 {
 “user”: “张三”,
 “title”: “工程师”,
 “desc”: “数据库管理”
 }’
  1. 创建索引
  2. docker search nginx 查看版本号 docker查看nginx日志_ELK_05

  3. 如果kibana中没有找到你创建的索引,可以在
  4. docker search nginx 查看版本号 docker查看nginx日志_elasticsearch_06

  5. 执行:

然后去查看:linux命令行查看:
curl -X GET ‘http://localhost:9200/_cat/indices?v’

总结

ELK比较简单的一个框架就搭建好了,目前这个框架适合不是日志量很大的项目使用。logstash比较消耗内存,所有后面的教程收集日志会换成filebeat。如果有哪里写的不对请大家指正,如果有不了解的可以给我留言或者联系我,一起学习,共同进步。