• ELK Stack 介绍 & Logstash 日志收集


    ELK Stack 组成

    Software Description Function
    E:Elasticsearch Java 程序 存储,查询日志
    L:Logstash Java 程序 收集、过滤日志
    K:Kibana Java 程序 提供 Web 服务,将数据页面化
    F:Filebeat Go 程序 收集、过滤日志

    ELK Stack 功能

    收集: 收集所有服务器的日志

    传输: 把日志稳定的传输到 ES 或者其他地方

    存储: ES 能有效快速的存储日志数据

    分析: 通过 Web 页面分析数据

    监控: 监控集群架构

    ELK Stack 优点

    处理方式灵活:Elasticsearch 是实时全文索引,具有强大的搜索功能

    配置相对简单:Elasticsearch 全部使用 JSON 接口,Logstash 使用模块配置,Kibana 的配置文件部分更简单。

    检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。

    集群线性扩展:Elasticsearch 和 Logstash 都可以灵活线性扩展

    前端操作绚丽:Kibana 的前端设计比较绚丽,而且操作简单

    ELK Stack 用途

    #=========== 收集所有的日志 ===========#
    ### 收集 Web 服务日志
    ### 收集服务日志
    ### 收集系统日志
    
    #============ 统计、分析 =============#
    ### 统计访问量
    ### 统计访问量前 10 的 IP
    ### 站点访问次数最多的 URL
    ### 查询一上午以上三个值
    ### 查询一下午以上三个值
    ### 对比一下上下午用户访问量
    ### 对比这一周,每天用户增长还是减少
    

    部署 ElasticSearch(走你

    部署 Kibana(走你

    部署 Logstash

    安装 Java 环境

    [root@web01 ~]# rpm -Uvh jdk-8u181-linux-x64.rpm
    

    服务器时间同步

    [root@web01 ~]# ntpdate time1.aliyun.com
    

    安装 Logstash

    # 上传
    [root@web01 ~]# rz logstash-6.6.0.rpm
    
    # 安装
    [root@web01 ~]# rpm -ivh logstash-6.6.0.rpm
    
    # 授权,已经授权
    [root@web01 ~]# chown -R logstash.logstash /usr/share/logstash/
    
    # 启动命令(需要指定配置文件等参数)
    /usr/share/logstash/bin/logstash
    

    Logstash 初识

    输入输出插件介绍

    # INPUT、OUTPUT 插件
    INPUT:插件使 Logstash 收集指定源的日志
    OUTPUT:插件将事件数据发送到特定的目的地
    
    INPUT 支持事件源 OUTPUT 支持输出源 CODEC 编解码器支持编码
    azure_event_hubs(微软云事件中心) elasticsearch(搜索引擎数据库) avro(数据序列化)
    beats(filebeat日志收集工具) email(邮件) CEF(嵌入式框架)
    elasticsearch(搜索引擎数据库) file(文件) es_bulk(ES中的bulk api)
    file(文件) http(超文本传输协议) Json(数据序列化、格式化)
    generator(生成器) kafka(基于java的消息队列) Json_lines(便于存储结构化)
    heartbeat(高可用软件) rabbitmq(消息队列 OpenStack) line(行)
    http_poller(http api) redis(缓存、消息队列、NoSQL) multiline(多行匹配)
    jdbc(java连接数据库的驱动) s3*(存储) plain(纯文本,事件间无间隔)
    kafka(基于java的消息队列) stdout(标准输出) rubydebug(ruby语法格式)
    rabbitmq(消息队列 OpenStack) tcp(传输控制协议)
    redis(缓存、消息队列、NoSQL) udp(用户数据报协议)
    s3*(存储)
    stdin(标准输入)
    syslog(系统日志)
    tcp(传输控制协议)
    udp(用户数据报协议)

    Logstash 输入输出测试

    # 配置环境变量
    [root@web01 ~]# vim /etc/profile.d/logstash.sh
    export PATH=/usr/share/logstash/bin/:$PATH
    
    # 收集标准输入到标准输出测试
    [root@web01 ~]# logstash -e 'input { stdin {} } output { stdout {} }'
    
    # 测试输入
    123456
    {
    	# 时间戳
        "@timestamp" => 2020-08-13T01:34:24.430Z,
          # 主机
          "host" => "web01",
          # 版本
          "@version" => "1",
          # 内容
          "message" => "123456"
    }
    
    # 收集标准输入到标准输出指定格式
    [root@web01 ~]# logstash -e 'input { stdin {} } output { stdout { codec => rubydebug } }'
    123456
    {
           "message" => "123456",
          "@version" => "1",
        "@timestamp" => 2020-08-13T01:39:40.837Z,
              "host" => "web01"
    }
    

    Logstash 收集标准输入到文件

    # 收集标准输入到文件
    [root@web01 ~]# logstash -e 'input { stdin {} } output { file { path => "/tmp/test.txt" } }'
    
    # 收集标准输入到文件
    [root@web01 ~]# logstash -e 'input { stdin {} } output { file { path => "/tmp/test_%{+YYYY-MM-dd}.txt" } }'
    

    Logstash 收集标准输入到 ES

    # 收集标准输入到ES
    [root@web01 ~]# logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["10.0.0.51:9200"] index => "test_%{+YYYY-MM-dd}" } }'
    
    # 随便输入些内容
    
    # 查看页面
    

    Logstash 使用

    Logstash 是一个开源的数据收集引擎,可以水平伸缩,而且 Logstash 整个 ELK Stack 当中拥有最多插件的一个组件,其可以接收来自不同来源的数据并统一输出到指定的且可以是多个不同目的地

    Logstash 配置文件

    # 默认的配置文件
    /etc/logstash/logstash.yml
    
    # 一般不使用,只有 Systemd 管理时默认使用,但 Systemd 启动 Logstash 会有许多坑
    

    收集文件日志到文件

    编辑配置文件

    [root@web01 ~]# vim /etc/logstash/conf.d/message_file.conf
    input {
      file {
        path => "/var/log/messages"
        start_position => "beginning"
        sincedb_path => "/dev/null"
      }
    }
    output {
      file {
        path => "/tmp/message_file_%{+YYYY-MM-dd}.log"
      }
    }
    

    指定配置启动

    # 检测配置(速度和启动一样慢)
    [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf -t
    
    # 启动
    [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf
    

    查看是否生成文件

    [root@web01 tmp]# ll
    total 4
    -rw-r--r-- 1 root root 1050 Aug 13 11:24 message_file_2020-08-13.log
    

    收集文件日志到 ElasticSearch

    编辑配置文件

    [root@web01 ~]# vim /etc/logstash/conf.d/message_es.conf
    input {
      file {
        path => "/var/log/messages"
        start_position => "beginning"
        sincedb_path => "/dev/null"
      }
    }
    output {
      elasticsearch {
        hosts => ["10.0.0.51:9200","10.0.0.52:9200","10.0.0.53:9200"]
        index => "message_es_%{+YYYY-MM-dd}"
      }
    }
    

    指定配置启动

    [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf
    

    查看是否生成索引数据

    用 ES-Head 观察是否生成索引数据,若数据收集成功,Kibana 也可以添加该索引模板,收集 ElasticSearch 中的日志数据

    Logstash 多实例收集日志

    创建多个数据目录

    [root@web01 ~]# mkdir /data/logstash/{message_file,message_es} -p
    # 授权
    [root@web01 ~]# chown -R logstash.logstash /data/
    

    指定数据目录启动

    # 指定配置文件,以及数据目录
    [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf --path.data=/data/logstash/message_es &
    [1] 18693
    [root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf --path.data=/data/logstash/message_file &
    [2] 18747
    
    ## logstash 更多选项可以观察命令帮助
    

    验证文件以及索引数据

    观察文件是否生成,观察 ElasticSearch 数据库中是否有新的索引和文档

    Logstash 单实例收集多份日志

    收集日志到文件

    # 编辑配置文件
    [root@web01 ~]# vim /etc/logstash/conf.d/more_file.conf
    
    input {
      file {
        type => "messages_log"
        path => "/var/log/messages"
        start_position => "beginning"
      }
      file {
        type => "secure_log"
        path => "/var/log/secure"
        start_position => "beginning"
      }
    }
    output {
      if [type] == "messages_log" {
        file {
          path => "/tmp/messages_%{+YYYY-MM-dd}"
        }
      }
      if [type] == "secure_log" {
        file {
          path => "/tmp/secure_%{+YYYY-MM-dd}"
        }
      }
    }
    

    收集日志到 ElasticSearch

    [root@web01 conf.d]# cat nginx_tomcat.conf
    input {
      file {
        type => "nginx_log"
        path => "/var/log/nginx/access.log"
        start_position => "beginning"
        sincedb_path => "/dev/null"
      }
      file {
        type => "tomcat_log"
        path => "/usr/local/tomcat/logs/localhost_access_log.*.txt"
        start_position => "beginning"
        sincedb_path => "/dev/null"
      }
    }
    
    output {
      if [type] == "nginx_log" {
        elasticsearch {
          hosts => ["10.0.0.121:9200"]
          index => "nginx_%{+YYYY-MM-dd}"
        }
      }
      if [type] == "tomcat_log" {
        elasticsearch {
          hosts => ["10.0.0.121:9200"]
          index => "tomcat_%{+YYYY-MM-dd}"
        }
      }
    }
    
    # 如果资源充足,可以使用多实例收集多日志,如果服务器资源不足,启动不了多实例,配置一个文件收集多日志启动
    
  • 相关阅读:
    mysql workbench 建表时PK, NN, UQ, BIN, UN, ZF, AI
    Asan检测内存读越界
    C 实现 C++ 的面向对象特性(封装、继承、多态)
    VIBE算法
    Go 大坑 nil
    求二叉树中节点的最大距离
    计算[1,N]范围内含有7的数字的个数
    一组便于创建线程和线程池的简单封装函数
    用C#执行doc命令
    可以自由停靠的窗体!
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/13498497.html
Copyright © 2020-2023  润新知