elkstack监控使用

一、基本介绍

​ Elastic Stack(也称为 ELK Stack)可用于各种用例 — 从可观测性到安全性,从企业搜索到业务分析。

二、架构和组件

(一)、架构图

(二)、组件

  1. elasticsearch

    elasticsearch是一个分布式搜索引擎,用于搜索、分析、存储日志。

  2. logstash

    logstash用于采集、过滤日志,将解析后的日志输出给elasticsearch。

  3. kibana

    kibana是一个数据可视化组件,提供丰富的web页面。

  4. filebeat

    filebeat是一个轻量级的日志采集器。

三、elasticsearch


(一)、环境准备

  1. 服务器规划

    序号 主机名 系统
    1 elk-master centos7-4C8G200G
    2 elk-salve centos7-4C8G200G
  2. 系统优化

    # 1. sysctl.conf配置
    vi /etc/sysctl.conf
    fs.file-max = 655360
    vm.max_map_count = 262144
    
    # 2. limits配置(将4096改为20480)
    vi /etc/security/limits.d/20-nproc.conf
    *          soft    nproc     20480
    
  3. jdk环境

    # openjdk8
    yum install java-1.8.0-openjdk.x86_64 -y
    

(二)、安装

  1. 下载

    wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/elasticsearch-7.7.1-x86_64.rpm
    
  2. 安装

    rpm -ivh elasticsearch-7.7.1-x86_64.rpm
    
  3. 创建目录和授权

    # 创建目录
    mkdir  -pv /data/elasticsearch
    # 授权
    chown -R elasticsearch.elasticsearch /data/elasticsearch
    
  4. master节点配置

    vim /etc/elasticsearch/elasticsearch.yml
    
    # 集群名称
    cluster.name: test
    # 节点名称
    node.name: elk-master
    # 数据保存路径
    path.data: /data/elasticsearch
    # 日志保存路径
    path.logs: /data/elasticsearch/log
    #  网络绑定
    network.host: 0.0.0.0
    # 端口
    http.port: 9200
    # 集群发现 elk-master:9300 elk-slave:9300
    discovery.seed_hosts: ["elk-master:9300", "elk-slave:9300"]
    # 手动指定maste节点r
    cluster.initial_master_nodes: ["elk-master"]
    
  5. slave节点配置

    vim /etc/elasticsearch/elasticsearch.yml
    
    # 集群名称
    cluster.name: test
    # 节点名称
    node.name: elk-slave
    # 数据保存路径
    path.data: /data/elasticsearch
    # 日志保存路径
    path.logs: /data/elasticsearch/log
    #  网络绑定
    network.host: 0.0.0.0
    # 端口
    http.port: 9200
    # 集群发现 elk-master:9300 elk-slave:9300
    discovery.seed_hosts: ["elk-master:9300", "elk-slave:9300"]
    # 手动指定maste节点r
    cluster.initial_master_nodes: ["elk-master"]
    
  6. jvm优化配置

    vi /etc/elasticsearch/jvm.options
    
    -Xms3g
    -Xmx3g
    
  7. 启动

    # 启动
    systemctl start elasticsearch
    # 开机自启动
    systemctl enable elasticsearch
    
  8. 验证

    # 查看集群状态(green)
    curl -XGET http://localhost:9200/_cluster/health?pretty
    # 查看集群节点
    curl -XGET 'http://localhost:9200/_cat/nodes?v&pretty'
    
  9. 中文分词器(可选)

    # 下载
    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.1/elasticsearch-analysis-ik-7.7.1.zip
    # 到es的plugins 目录创建文件夹
    mkdir /usr/share/elasticsearch/plugins/ik
    # 上传文件到该目录
    elasticsearch-analysis-ik-7.7.1.zip
    # 解压
    unzip elasticsearch-analysis-ik-7.7.1.zip
    # 重启es
    systemctl restart elasticsearch
    

四、logstash


(一)、安装

  1. 下载

    wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/logstash-7.7.1.rpm
    
  2. 安装

    rpm -ivh logstash-7.7.1.rpm
    
  3. 管道文件配置

    # 过滤nginx的日志
    vim /etc/logstash/conf.d/nginx.conf
    
    input {
        beats {
            port => "5044"
        }
    }
    filter {
    
      if [fields][logtype] == "nginx-access" {
        mutate {
          gsub => ["message", "\\x", "\\\x"]
        }
        json {
          source => "message"
        }
        mutate {
          remove_field => [ "message" ]
        }
        if "HEAD" in [request_method] or "x.x.x.x" in [remote_addr] or "x.x.x.x" in [http_x_forwarded_for] {
          drop {}
        }
        useragent {
          source => "http_user_agent"
          target => "ua"
        }
        if "-" in [upstream_response_time] {
          mutate {
            replace => {
              "upstream_response_time" => "0"
            }
          }
        }
        mutate {
          convert => [ "upstream_response_time", "float" ]
        }
        mutate {
          gsub => [
            "request_body", "\\x22", '"'
          ]
          gsub => [
            "request_body", "\\x0A", "\n"
          ]
        }
      }
    }
    output {
        elasticsearch {
            hosts => ["http://localhost:9200"]
            index => "%{[fields][logsource]}-%{+YYYY.MM.dd}"
        }
    }
    
  4. logstash.yml文件配置

    # 数据目录
    path.data: /data/logstash/data
    # 日志目录
    path.logs: /data/logstash/log
    
  5. jvm优化

    vim /etc/logstash/jvm.options
    
    -Xms2g
    -Xmx2g
    
  6. 创建文件和授权

    # 创建
    mkdir -pv /data/logstash/{data,log}
    # 授权
    chown -R logstash.logstash /data/logstash/
    
  7. 启动

    # 启动
    systemctl start logstash
    # 开机自启动
    systemctl enable logstash
    

(二)、管理

  1. nginx的json日志格式配置

    log_format  main '{"@timestamp":"$time_iso8601",'
                     '"remote_addr":"$remote_addr",'
                     '"request_uri":"$request_uri",'
                     '"request_method":"$request_method",'
                     '"server_protocol":"$server_protocol",'
                     '"request_time":$request_time,'
                     '"upstream_response_time":"$upstream_response_time",'
                     '"upstream_addr":"$upstream_addr",'
                     '"host":"$host",'
                     '"hostname":"$hostname",'
                     '"http_host":"$http_host",'
                     '"uri":"$uri",'
                     '"http_x_forwarded_for":"$http_x_forwarded_for",'
                     '"http_user_agent":"$http_user_agent",'
                     '"request_body":"$request_body",'
                     '"status":"$status"}';
    
  2. 微服务管道配置

    vim /etc/logstash/conf.d/app.conf
    
    input {
        beats {
            port => "5045"
        }
    }
    filter {
        grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:time}\s+%{LOGLEVEL:loglevel}\s+%{NOTSPACE:service}\s+%{NUMBER:pid}\s+%{NOTSPACE:thread}\s+%{DATA:class}:\s+%{GREEDYDATA:message}"}
        overwrite => ["message"]
      }
      if "|" in [message] {
        grok {
          match => { "message" => "%{NOTSPACE:caller}\|+%{NOTSPACE:user}\|+%{NOTSPACE:method}\|%{GREEDYDATA:message}"}
          overwrite => ["message"]
        }
      }
    }
    output {
        elasticsearch {
            hosts => ["http://localhost:9200"]
            index => "%{[fields][logsource]}-%{+YYYY.MM.dd}"
        }
    }
    
  3. 其他

五、filebeat


(一)、安装

  1. 下载

    wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/filebeat-7.7.1-x86_64.rpm
    
  2. 安装

    rpm -ivh filebeat-7.7.1-x86_64.rpm
    
  3. 配置

    vim /etc/filebeat/filebeat.yml
    
    # nginx日志收集
    t.config_dir: /usr/share/filebeat/module
    filebeat.inputs:
    - input_type: log
      enabled: true
      paths: 
        - /var/log/nginx/*.log
      document_type: test-nginx-log
      fields:
        logtype: nginx-access
        logsource: test-nginx-log
      multiline.pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    name: ip # 收集服务器ip地址
    output.logstash:
      hosts: ["elk-master:5044"]
    
    # java微服务日志收集
    t.config_dir: /usr/share/filebeat/module
    filebeat.inputs:
    - input_type: log
      enabled: true
      paths:
        - /data/Log/**/*.log
      document_type: test-app-log
      fields:
        logsource: test-app-log
      multiline.pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    name: ip # 收集服务器ip地址
    output.logstash:
      hosts: ["elk-master:5045"]
    
  4. 参数说明

    # input 输入日志
    
    # 日志路径
    paths
    # 文档类型
    document_type
    # 属性配置
    fields
    # 多行日志配置
    multiline
    
    # output 输出日志
    
    # 输出到logstash
    output.logstash
    # logstash服务器地址
    hosts
    
  5. 启动

    # 启动
    systemctl start filebeat
    # 开机自启动
    systemctl enable filebeat
    

六、kibana


(一)、安装

  1. 下载

    wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/kibana-7.7.1-x86_64.rpm
    
  2. 安装

    rpm -ivh kibana-7.7.1-x86_64.rpm
    
  3. 配置

    vim /etc/kibana/kibana.yml
    
    # 端口
    server.port: 5601
    # 地址
    server.host: "localhost"
    # es服务器地址
    elasticsearch.hosts: ["http://localhost:9200"]
    # 中文
    i18n.locale: "zh-CN"
    
  4. 启动

    # 启动
    systemctl start kibana
    # 自启动
    systemctl enable kibana
    
  5. 访问web

    curl http://localhost:5601
    

(二)、管理

  1. 索引管理

    # 访问地址
    http://localhost:5601/app/kibana#/management/elasticsearch/index_management/indices
    # 操作
    删除、查询索引
    
  2. 索引模式

    # 访问地址
    http://localhost:5601/app/kibana#/management/kibana/index_patterns?_g=()
    # 创建索引
    # 1. 定义索引模式
    使用通配符
    # 2. 配置设置
    时间筛选字段
    @timestamp
    
  3. 可视化

    # 访问地址
    http://localhost:5601/app/kibana#/visualize
    
  4. 仪表盘

    # 访问地址
    http://localhost:5601/app/kibana#/dashboards
    
posted @ 2021-01-11 13:51  qms19  阅读(137)  评论(0编辑  收藏  举报