zoukankan      html  css  js  c++  java
  • elk 7.9.3 版本容器化部署

    ELK-V7.9.3 部署

    • 为什么用到ELK?
    平时我们需要进行日志分析的时候,可以直接在日志文件中 grep、awk 就可以过滤出自己想要的信息及关键字,但规模较大的场景中,此方法极大的减低了效率,面临的问题,包括日志量过大,如何归档、文本搜索太慢、如何多维度查询,需要集中化的日志管理,所有服务器上的日志并收集汇总。常见解决思路就是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问,一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率;
    
    • 完整的集中式日志系统,需要包含以下几个主要特点:
    1、收集-能够采集多种来源的日志数据
    2、传输-能够稳定的把日志数据传输到中央系统
    3、存储-如何存储日志数据
    4、分析-可以支持 UI 分析
    5、警告-能够提供错误报告,监控机制
    
    • ELK提供了一套优越的解决方案,并且开源,互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统
    ELK是三款开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 新增了一个FileBeat,轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash
    1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
    2、Logstash 主要是日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机,server端负责将收到的各节点日志进行过滤、修改等操作一并发送至elasticsearch。
    3、Kibana 是开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
    4、Filebeat 涉及两个组件:查找器prospector和采集器harvester,来读取文件(tail file)并将事件数据发送到指定的输出elasticsearch中或者Kibana;
    5、概述:
       filebeat隶属于beats,目前Beats包含工具有:Packetbeat(搜集网络流量数据),Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)Filebeat(搜集文件,日志数据汇总),Winlogbeat(搜集 Windows 事件日志数据)等;
    
    • 官方文档
    Filebeat:
    https://www.elastic.co/cn/products/beats/filebeat
    https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html
    
    Logstash:
    https://www.elastic.co/cn/products/logstash
    https://www.elastic.co/guide/en/logstash/5.6/index.html
    
    Kibana:
    https://www.elastic.co/cn/products/kibana
    https://www.elastic.co/guide/en/kibana/5.5/index.html
    
    Elasticsearch:
    https://www.elastic.co/cn/products/elasticsearch
    https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html
    
    elasticsearch中文社区:
    https://elasticsearch.cn/
    
    此文档以容器化部署elk,es为集群,除filebeat为源码包的方式
    • Centos 7.x 系统
    • 2.4Hz 8核32G内存
    • 注意内存需给大,否则会出现es挂的情况

    容器化部署elk

    • elasticsearch+filebeat+kibana v7.9.3(最新)
    • docker 服务安装
    # 更新yum源
    yum update
    # 删除旧版本的docker
    yum remove docker  docker-common docker-selinux docker-engine -y
    # 安装依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 下载安装docker源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 安装docker
    yum -y install docker-ce
    # 启动docker服务
    systemctl start docker && systemctl enable docker
    # 查看docker版本
    docker version
    
    • 下载elasticsearch,kibana镜像
    docker pull elasticsearch:7.9.3
    docker pull kibana:7.9.3
    docker pull lmenezes/cerebro:latest (es索引管理工具)
    
    • 创建elk数据目录,用于映射容器数据到宿主机
    # 创建存放配置文件,数据,日志目录
    mkdir -p /data/elk/{conf,data,logs}
    # 由于我们ES是以集群的方式,所以数据跟日志要创建master,slave1,slave2三个节点目录
    mkdir -p /data/elk/data/{master,slave1,slave2}
    mkdir -p /data/elk/logs/{master,slave1,slave2}
    
    • 创建es-master,slave1,slave2节点配置文件
    # master:/data/elk/conf/master/master.yml
    cluster.name: yunwei_cluster 
    node.name: master
    node.master: true
    node.data: true
    network.host: 0.0.0.0
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.port: 9200
    transport.port: 9300
    discovery.seed_hosts:
      - 172.17.0.2:9300   # master,此处是es容器的ip,,如不缺则容器启动之后查看并修改即可
      - 172.17.0.3:9301   # slave1,此处是es容器的ip,,如不缺则容器启动之后查看并修改即可
      - 172.17.0.4:9301   # slave2,此处是es容器的ip,,如不缺则容器启动之后查看并修改即可
    cluster.initial_master_nodes:
      - 172.17.0.2        # 此IP为master容器ip地址,主节点
    xpack.security.enabled: false
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false
    
    # slave1:/data/elk/conf/slave1/slave1.yml
    cluster.name: yunwei_cluster 
    node.name: slave1
    node.master: true
    node.data: true
    network.host: 0.0.0.0
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.port: 9201
    transport.port: 9301
    discovery.seed_hosts:
      - 172.17.0.2:9300    # master
      - 172.17.0.3:9302    # slave1
      - 172.17.0.4:9301    # slave2
    cluster.initial_master_nodes:
      - 172.17.0.2
    xpack.security.enabled: false
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false
    
    # slave2:/data/elk/conf/slave2/slave2.yml
    cluster.name: yunwei_cluster 
    node.name: slave2
    node.master: true
    node.data: true
    network.host: 0.0.0.0
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.port: 9202
    transport.port: 9302
    discovery.seed_hosts:
      - 172.17.0.2:9300   # master
      - 172.17.0.3:9302   # slave2
      - 172.17.0.4:9301   # slave3
    cluster.initial_master_nodes:
      - 172.17.0.2
    xpack.security.enabled: false
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false
    
    • 启动elasticsearch容器: master,slave1,slave2节点
    # master
    docker run -d --name=master -p 9200:9200 -p 9300:9300 -v /data/elk/config/master.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/data/master:/usr/share/elasticsearch/data -v /data/elk/logs/master:/usr/share/elasticsearch/logs elasticsearch:7.3.1
    # slave1
    docker run -d --name=slave1 -p 9201:9201 -p 9301:9301 -v /data/elk/config/slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/data/slave1:/usr/share/elasticsearch/data -v /data/elk/logs/slave1:/usr/share/elasticsearch/logs elasticsearch:7.3.1
    # slave2
    docker run -d --name=slave2 -p 9201:9201 -p 9301:9301 -v /data/elk/config/slave2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/data/slave2:/usr/share/elasticsearch/data -v /data/elk/logs/slave2:/usr/share/elasticsearch/logs elasticsearch:7.3.1
    
    • 修改es的运行内存,防止出现内存溢出,es挂的情况
    # 进入es容器:master,slave1,slave2
    docker exec -it master/slave1/slave2 /bin/bash
    # 修改es启动内存
    /usr/share/elasticsearch/config/jvm.options
    # Xms represents the initial size of total heap space
    # Xmx represents the maximum size of total heap space
    -Xms3g   # 根据实际内存分配
    -Xmx3g
    # 重启master,slave1,slave2容器
    
    • 浏览器访问测试:http://ip:{9200,9201,9202}
    • cerebro容器的创建及启动
    docker run -d -p 9001:9000 --name=cerebro lmenezes/cerebro
    
    docker run -d -p 5601:5601 --name=kibana -e  "I18N_LOCALE=zh-CN" -e "ELASTICSEARCH_URL=http://物理机的IP地址或域名:9200" kibana:7.3.1
    
    • 修改kibana配置文件,添加elasticsearch地址
    # 登录kibana容器,修改配置文件
    docker exec -it kibana /bin/bash
    /usr/share/kibana/config/kibana.yml
    # 添加elasticsearch
    elasticsearch.hosts: [ "http://宿主机IP:9200" ]
    # 重启kibana容器
    docker restart kibana
    
    • 查看已创建启动的容器:docker ps

    在这里插入图片描述

    在这里插入图片描述

    filebeat 收集汇总日志

    • 日志在单个文件:根据不同的服务编写不同的yml文件并在主配置文件中导入子yml加载执行采集即可;

    • 日志在多个文件:直接可以在主配置yml文件中编写采集动作即可;

    • filebeat 源码包下载:

    # 下载filebeat源码包 -- elk官网下载即可   filebeat-7.9.3-linux-x86_64.tar.gz
    日志收集端服务节点:/srv/filebeat-7.9.3-linux-x86_64.tar.gz
    # 解压
    tar -zxf filebeat-7.9.3-linux-x86_64.tar.gz
    cd filebeat-7.9.3
    
    • 示例一:日志在单个文件(采集详细级别的日志: debug,info,warn,error)
    目录结构:
    filebeat-7.9.3
       - modules   # 子yml文件、具体某个服务日志
         - asset-service.yml
         - user-service.yml
       - filebeat-new.yml  # 主yml文件
    
    • 主yml配置文件:filebeat-new.yml
    filebeat.config.inputs:
      path:
        modules/*.yml    # 导入子服务配置文件
      reload.enabled: true  # 启动加载
      reload.period: 10s    # 每10秒检查一次
    
    # 自定义索引名
    setup.ilm.enabled: false
    setup.template.name: "test"
    setup.template.pattern: "test-*"
    setup.template.overwrite: true
    
    # 删除索引中不需要的字段
    processors:
    - drop_fields:
        fields: ["input","agent"]
        
    # 收集日志输出到elasticsearch
    output.elasticsearch:
      hosts: ["IP地址:9200"]
      index: "test-%{+yyy.MM.dd}"
    
    • 子服务yml配置文件:asset-service.yml
    # DEBUG 日志过滤输出
    - type: log
      enabled: true
      paths:
        - /home/opsprod/deploy/debug-logs/asset-service/debug-log
      # 过滤debug日志
      include_lines: ['DEBUG']
      # 项目环境
      tags: ["tangpiao","pro"]
      # 定义字段
      fields:
        level: DEBUG
        module: asset
      # 如果设置为true,则在es中新增的字段格式为:"level":"debug","module":"asset"
      fields_under_root: true
      # 处理一行日志占据多行的情况
      # 多行日志开始的那一行的pattern
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
      
    # ERROR 日志过滤输出
    - type: log
      enabled: true
      paths:
        - /home/opsprod/deploy/debug-logs/asset-service/debug-log
      include_lines: ['ERROR']
      tags: ["tangpiao","pro"]
      fields:
        level: ERROR
        module: asset
      fields_under_root: true
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
    
    # WARN 日志过滤输出
    - type: log
      enabled: true
      paths:
        - /home/opsprod/deploy/debug-logs/asset-service/debug-log
      include_lines: ['WARN']
      tags: ["tangpiao","pro"]
      fields:
        level: WARN
        module: asset
      fields_under_root: true
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
    
    # INFO 日志过滤输出
    - type: log
      enabled: true
      paths:
        - /home/opsprod/deploy/debug-logs/asset-service/debug-log
      include_lines: ['INFO']
      tags: ["tangpiao","pro"]
      fields:
        level: INFO
        module: asset
      fields_under_root: true
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
    
    • 示例二:日志在多个文件(采集详细级别的日志: debug,info,warn,error)
    • 主配置文件:filebeat-new.yml
    # 创建新的filebeat收集模板配置文件,不在原有的filebeat.yml修改:  vim filebeat-new.yml
    filebeat.inputs:
    - type: log
      enabled: true
      # # 指定要监控的日志,可以指定具体得文件或者目录
      paths:
        - /home/opsabc/deploy/debug/user-service/debug-log
      # 定义tags,可设置多个,以逗号分隔
      tags: ["test"]
      # 定义日志级别,添加新的字段
      fields:        
        level: DEBUG
        servicename: user
      # 如果设置为true,则在es中新增的字段格式为:"level":"debug"
      fields_under_root: true
      # 处理一行日志占据多行的情况
      # 多行日志开始的那一行的pattern
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
    
    - type: log
      enabled: true
      # # 指定要监控的日志,可以指定具体得文件或者目录
      paths:
        - /home/opsabc/deploy/error/user-service/error-log
      # 定义tags,可设置多个,以逗号分隔
      tags: ["test"]
      # 定义日志级别,添加新的字段
      fields:        
        level: ERROR
        servicename: user
      # 如果设置为true,则在es中新增的字段格式为:"level":"error"
      fields_under_root: true
      # 处理一行日志占据多行的情况
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
    
    - type: log
      enabled: true
      # # 指定要监控的日志,可以指定具体得文件或者目录
      paths:
        - /home/opsabc/deploy/info/user-service/info-log
      # 定义tags,可设置多个,以逗号分隔
      tags: ["test"]
      # 定义日志级别,添加新的字段
      fields:        
        level: INFO
        servicename: user
      # 如果设置为true,则在es中新增的字段格式为:"level":"error"
      fields_under_root: true
      # 处理一行日志占据多行的情况
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
    
    - type: log
      enabled: true
      # # 指定要监控的日志,可以指定具体得文件或者目录
      paths:
        - /home/opsabc/deploy/warn/user-service/warn-log
      # 定义tags,可设置多个,以逗号分隔
      tags: ["test"]
      # 定义日志级别,添加新的字段
      fields:        
        level: WARN
        servicename: user
      # 如果设置为true,则在es中新增的字段格式为:"level":"error"
      fields_under_root: true
      # 处理一行日志占据多行的情况
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.* ['
      multiline.negate:  true
      multiline.match:   after
        
    # 自定义索引名
    setup.ilm.enabled: false
    setup.template.name: "test"
    setup.template.pattern: "test-*"
    setup.template.overwrite: true
    
    # 删除索引中不需要的字段
    processors:
    - drop_fields:
        fields: ["input","agent"]
    
    # 收集日志输出到elasticsearch
    output.elasticsearch:
      hosts: ["IP地址:9200"]
      index: "test-%{+yyy.MM.dd}"
    
    • 启动filebeat进行日志监控收集
    nohup /srv/filebeat-7.9.3/filebeat -e -c /srv/filebeat-7.9.3/filebeat-new.yml &
    
    • Stack Management ——> 索引管理

    在这里插入图片描述

  • 相关阅读:
    diy_markdown 的 html 显示
    根据 vuex 的 this.$store.dispatch() 返回值 处理逻辑
    vue 项目配置: 局域网 ip 发布
    vue-markdown 之 markdown-it, 以及 table of content 的实现:markdown-it-toc-and-anchor
    程序员面试金典-面试题 08.05. 递归乘法
    程序员面试金典-面试题 08.04. 幂集
    程序员面试金典-面试题 08.03. 魔术索引
    程序员面试金典-面试题 08.02. 迷路的机器人
    程序员面试金典-面试题 08.01. 三步问题
    程序员面试金典-面试题 05.08. 绘制直线
  • 原文地址:https://www.cnblogs.com/Anesthesia-is/p/15165917.html
Copyright © 2011-2022 走看看