zoukankan      html  css  js  c++  java
  • 测试环境下ELK+Filebeat部署流程

    开发组的同事提的需求,因为每次手动登录服务器查看日志时太慢了效率低,所以申请将要查看的日志接入到elk系统中,这样可以提高工作效率。
    因此我这边给自己测试的机器部署了elk系统,给要查看的机器部署了filebeat,通过编写logstash的过滤文件,最终将要查看日志的关键信息显示到了kibana界面。
    因为是测试环境使用,所以我还做了kibana的权限认证,新建了role和用户等。
    这篇文章只写了操作步骤,涉及到的众多原理稍晚我再总结出来。
    下面来看一下具体的部署流程吧~

    一、环境规划

    两台实验虚拟机搭载centos7.0,ELK服务器是8G内存,Web服务器是16G内存。

    因为是测试环境,生产环境中的filebeat搜集到的日志会先传输给kafka然后再传送给logstash

    流程:
    1.业务请求到达filebeat所在的机器;
    2.FileBeat搜集新增的日志,通过LogStash的5044端口上传日志;
    3.LogStash将日志信息通过本机的9200端口传入到ElasticSerach;
    4.搜索日志的用户通过浏览器访问Kibana,服务器端口是5601;
    5.Kibana通过9200端口访问ElasticSerach;

    二、环境搭建

    前提是本机有java环境,需要提前安装好jdk和tomcat。

    java –-version
    openjdk 11.0.8 2020-07-14 LTS
    OpenJDK Runtime Environment 18.9 (build 11.0.8+10-LTS)
    OpenJDK 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode, sharing)
    

    应用版本统一使用官网下载的7.1.0源码包,解压到对应目录即可(几个软件包必须一致否则会出问题),因为做了kibana的权限验证,所以elk三个的配置文件都有修改xpack部分的内容。

    2.1 elk环境搭建

    2.1.1 elasticsearch搭建

    解压安装包后,新建elasticsearch作为启动elasticsearch的用户,修改解压后目录的权限和配置文件
    1.elasticsearch.yml

    vim config/elasticsearch.yml
    修改下面几行为如下的:
    node.name: node-1
    network.host: 172.16.108.137
    http.port: 9200
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    cluster.initial_master_nodes: ["node-1"]
    # 开启权限访问控制
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    
    1. jvm.options
    vim config/jvm.options
    -Xms30g
    -Xmx30g
    

    切换到elasticsearch用户,启动服务

    su - elasticsearch
    cd /usr/local/elasticsearch-7.1.0/bin
    nohup ./elasticsearch &
    

    在启动过程中可能会报错,需要对系统的资源限制情况进行修改

    1. elasticsearch每个进程最大同时打开的文件数,至少需要65535;
    vim /etc/security/limits.conf
    elasticsearch  hard  nofile  65535
    elasticsearch  soft  nofile  65535
    

    2.虚拟内存大小

    vim /etc/sysctl.conf
    vm.max_map_count=262144
    sysctl -p
    

    3.elasticsearch修改最大线程个数

    vim /etc/security/limits.conf
    elasticsearch  hard  nproc   4096
    elasticsearch  soft  nproc   4096
    

    这里可以参考:
    https://blog.csdn.net/achenyuan/article/details/87881548
    https://www.cnblogs.com/hellxz/p/11057234.html

    启动成功后,可以在浏览器中访问链接:
    http://172.16.108.137:9200/_cat/indices?v

    http://172.16.108.137:9200/进行访问

    2.1.2 logstash搭建

    解压安装包后,修改配置文件下面几行为以下这样,密码为随机生成的8位字符串。

    vim /usr/local/logstash-7.1.0/config/logstash.yml
    xpack.monitoring.enabled: True
    xpack.monitoring.elasticsearch.username: kibana
    xpack.monitoring.elasticsearch.password: "********"
    xpack.monitoring.elasticsearch.hosts: ["http://172.16.108.137:9200"]
    xpack.monitoring.collection.pipeline.details.enabled: true
    path.config: /usr/local/logstash-7.1.0/config/*.conf
    

    logstash对日志的过滤文件:

    vim /usr/local/logstash-7.1.0/config/app-admin.conf
    input {
        beats {
            port => "5044"
        }
    }
    filter {
        grok {
            match => {
                "message" => "%{GREEDYDATA:timestamp}[%{WORD:log_level}]%{GREEDYDATA:meaasge}"
            }
        }
        date {
            match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
        }
        mutate {
            remove_field => "timestamp"
        }
    }
    output {
        elasticsearch {
            hosts => ["172.16.108.137:9200"]
            index => "%{[appname]}-%{[loglevel]}-%{+YYYY.MM}"
            user => "elastic"
            password => "********"
        }
    }
    

    过滤3个字段:
    1.时间 2.日志等级warn/info/error,剩余所有日志信息放在message字段中

    生成的es索引格式为:appname(我这里是app-admin/app-activity)-loglevel(日志等级error/info/warn)-时间(年月2020-12)
    这几个定义的变量在filebeat子配置文件中有体现。

    分为3段:
    input为日志输入,这里设定监听端口为5044,获取方式是beat客户端采集。
    filter根据日志的log_type进行正则匹配并分割,只处理了以.log结尾的日志。
    output为日志输出,这里输出到本机的es进行存储,index按照应用名-loglevel-时间戳存储。

    启动logstash:
    nohup ./bin/logstash -f config/app-admin.conf &

    2.1.3 kibana搭建

    解压后新建用户kibana,修改目录所有人所有组为kibana

    vim config/kibana.yml
    server.port: 5601
    server.host: "172.16.108.137"
    elasticsearch.hosts: ["http://172.16.108.137:9200"]
    elasticsearch.username: "kibana"
    elasticsearch.password: "********"
    

    修改完成后启动kibana
    nohup ./bin/kibana &
    三个服务都启动后,对应的端口都会开启。

    2.2 filebeat环境搭建

    解压后,修改主配置文件filebeat.yml:

    filebeat.config.inputs:
      enabled: true
      path: /usr/local/filebeat-7.1.0-linux-x86_64/modules.d/app-*.yml
    output.logstash:
      # The Logstash hosts
      hosts: ["172.16.108.137:5044"]
    

    主配置文件中定义了子配置文件的路径,所以就会读取所有子配置文件。

    子配置文件:
    1.

    cat modules.d/app-admin-error.yml
    - type: log
      enabled: true
      paths:
        - /data/logs/app-admin/*.log
      fields_under_root: true
      fields: 
        appname: app-admin
        log_type: application
        loglevel: error
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    
    cat modules.d/app-admin-info.yml          
    - type: log
      enabled: true
      paths:
        - /data/logs/app-admin/*.log
      fields_under_root: true
      fields: 
        appname: app-admin
        log_type: application
        loglevel: info
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    
     cat modules.d/app-admin-warn.yml     
    - type: log
      enabled: true
      paths:
        - /data/logs/app-admin/*.log
      fields_under_root: true
      fields: 
        appname: app-admin
        log_type: application
        loglevel: warn
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    
    cat modules.d/app-activity-info.yml 
    - type: log
      enabled: true
      paths:
        - /data/logs/app-activity/*.log
      fields_under_root: true
      fields: 
        appname: app-activity
        log_type: application
        loglevel: info
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    
    cat modules.d/app-activity-warn.yml     
    - type: log
      enabled: true
      paths:
        - /data/logs/app-activity/*.log
      fields_under_root: true
      fields: 
        appname: app-activity
        log_type: application
        loglevel: warn
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    
    cat modules.d/app-activity-error.yml         
    - type: log
      enabled: true
      paths:
        - /data/logs/app-activity/*.log
      fields_under_root: true
      fields: 
        appname: app-activity
        log_type: application
        loglevel: error
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    

    共6个子配置文件

    文件最后三行是根据日志文件的具体格式来定的,我这里日志的格式如下:

    第一行为正则匹配日期,格式为:4位数字-2位数字-2位数字
    第2.3行为将多行写到一个message字段中,不分开。
    根据应用配置不同的采集,需要新增field供logstash区分不同应用不同的日志文件和日志格式存入es
    java日志需要配置multiline.pattern,配置该正则的行和该行下面所有不匹配的行并入到一条记录上传

    启动filebeat:
    nohup ./filebeat -e -c filebeat.yml -d publish

    2.4 elk开启权限控制

    启动kibana的权限控制,为了防止混淆,这里多个用户都是用同一个密码
    在elasticsearch目录切换到elasticsearch用户下启动进程:
    ./bin/elasticsearch-setup-passwords interactive

    依次初始化相关用户密码,需要在kibana和logstash等等配置中用到
    elastic, kibana, logstash_system, beats_system, apm_system, and remote_monitoring_user
    elastic 为superuser

    此时,就可以在浏览器中访问kibana:
    http://172.16.108.137:5601/app/kibana#/home?_g=()登录了。
    登录名:elastic 密码为设置的密码

    kibana新建role和普通用户可以参考链接:
    https://www.cnblogs.com/sanduzxcvbnm/p/11427692.html

    三、使用supervisor进程管理工具管理进程

    elk服务器

    vim /etc/supervisord.d/elk.conf
    [program:elasticsearch]
    command=/usr/local/elasticsearch-7.1.0/bin/elasticsearch
    directory=/usr/local/elasticsearch-7.1.0
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/elasticsearch.log
    redirect_stderr=true
    user=elasticsearch
    
    [program:kibana]
    command=/usr/local/kibana-7.1.0-linux-x86_64/bin/kibana -c /usr/local/kibana-7.1.0-linux-x86_64/config/kibana.yml
    directory=/usr/local/kibana-7.1.0-linux-x86_64
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/kibana.log
    redirect_stderr=true
    user=root
    
    [program:logstash]
    command=/usr/local/logstash-7.1.0/bin/logstash -f /usr/local/logstash-7.1.0/config/app-admin.conf
    directory=/usr/local/logstash-7.1.0
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/logstash.log
    redirect_stderr=true
    user=root
    

    filebeat服务器

    vim /etc/supervisord.d/filebeat.conf
    [program:filebeat]
    command=/usr/local/filebeat-7.1.0-linux-x86_64/filebeat -c /usr/local/filebeat-7.1.0-linux-x86_64/filebeat.yml
    directory=/usr/local/filebeat-7.1.0-linux-x86_64
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/filbeat.log
    redirect_stderr=true
    user=root
    
  • 相关阅读:
    iphone在iframe页面的宽度不受父页面影响,避免撑开页面
    touch事件应用
    js获取手机屏幕宽度、高度
    css3特效样式库
    js基础:对DOM进行操作,删除、添加元素
    eval基础,基础用法及解析json
    ajax调用数据案例,二级联动
    (原)String类两种实例化的区别
    java订电影票系统
    多线程练习(java)
  • 原文地址:https://www.cnblogs.com/even160941/p/14234681.html
Copyright © 2011-2022 走看看