• Docker安装ELK日志分析系统


    Docker安装ELK 分布式日志分析系统

    一、简介

    ELK(分布式日志分析系统)包含ElasticSearch(可简称ES),Logstash,Kibana三个核心组件。
    ElasticSearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能,对外提供REST和java api,可扩展性的分布式系统。
    Logstash是一个用来搜集、分析、过滤日志的工具,几乎支持所有类型的日志,能够接收多种来源的日志,包括syslog、mq,并且能够输出到多种介质中,包括es,邮件等等。
    Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户定制仪表板视图,还允许用户使用es语法进行操作。

    二、环境准备

    • VMWare版本:15.5.5
    • 操作系统:CentOS7
    • Docker版本:19.03.12
    • ELK镜像准备:
    # 建议拉取相同版本的ELK镜像
    docker pull elasticsearch:7.8.0
    docker pull logstash:7.8.0
    docker pull kibana:7.8.0
    # ElasticSearch-Head是一个用于查看ElasticSearch相关信息的管理界面
    docker pull mobz/elasticsearch-head:5-alpine
    

    三、安装操作:

    1. 安装ElasticSearch(如需安装IK中文分词器,可参考这里

    docker run -d -p 5601:5601 --link=elasticsearch-ik:elasticsearch -v /docker/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml --name kibana_es kibana:7.8.0
    docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kibana_es -p 5601:5601 -v /docker/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.8.0

    • 创建容器并启动:docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:7.8.0
      9300:集群节点间通讯接口
      9200:客户端访问接口
      discovery.type=single-node :表示单节点启动

    • 查看实时日志:docker logs -f elasticsearch,发现ES启动失败

    • 错误处理:

    ERROR: [2] bootstrap checks failed
    [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
    

    错误[1]的解决方法:

    1. 修改sysctl配置:vi /etc/sysctl.conf
    2. 添加内容:vm.max_map_count=655360
    3. 保存修改,执行:sysctl -p

    错误[2]的解决方法:

    1. 删除启动失败的ES容器:`docker rm elasticsearch
    2. 在创建容器命令中加入指定discovery.type=single-node:
      docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch elasticsearch:7.8.0
    3. 执行命令后查看容器运行情况:docker ps,及实时日志:docker logs -f elasticsearch
    ① 验证ElasticSearch

    执行:curl localhost:9200,显示如下即启动成功

    [root@localhost docker]# curl localhost:9200
    {
      "name" : "9f832bbeb44a",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "8GAjHyQEToO6PMl8dDoemQ",
      "version" : {
        "number" : "7.8.0",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
        "build_date" : "2020-06-14T19:35:50.234439Z",
        "build_snapshot" : false,
        "lucene_version" : "8.5.1",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    

    [注]:容器启动成功后,可进入容器内部的/config/elasticsearch.yml进行其他配置

    ② 其他情况(没碰到,记录仅提供问题解决思路)
    • 如果报如下错误
    Java HotSpot(TM) 64-Bit Server VM warning: INFO:
    os::commit_memory(0x0000000085330000, 2060255232, 0) failed;
    error=’Cannot allocate memory’ (errno=12)
    

    这是由于elasticsearch:tag 默认分配 jvm 空间太大,内存不足以分配导致。
    解决方法就是修改jvm空间分配:

    1. 查找 jvm.options 文件:find /var/lib/ -name jvm.options
    2. 修改查找到的 jvm.options 文件:(均改为 512m)
      vi /var/lib/docker/overlay2/1ff5019ead459b4d090b4a72e95e3cc17dc7a8432ce0051e470a3c99ac35c4a6/diff/usr/share/elasticsearch/config/jvm.options
    # Xms represents the initial size of total heap space
    # Xmx represents the maximum size of total heap space
    
    -Xms512m
    -Xmx512m
    
    ################################################################
    ## Expert settings
    ################################################################
    
    1. 保存退出,再次运行创建运行elasticsearch命令,成功启动。

    2. 安装kibana

    尝试执行docker run -d -e ELASTICSEARCH_URL=http://192.168.0.199:9200 --name kibana -p 5601:5601 kibana:7.8.0
    发现加了-e ELASTICSEARCH_URL=http://192.168.0.199:9200并没有什么卵用
    还是中规中矩启动:
    docker run -d -p 5601:5601 --name kibana_es kibana:7.8.0
    查看启动日志:docker logs -f kibana_es
    反复出现以下字样

    {"type":"log","@timestamp":"2020-07-29T09:10:35Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"Unable to revive connection: http://elasticsearch:9200/"}
    {"type":"log","@timestamp":"2020-07-29T09:10:35Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"No living connections"}
    

    进入kibana容器内
    docker exec -it kibana_es bash
    vi config/kibana.yml

    #
    # ** THIS IS AN AUTO-GENERATED FILE **
    #
    
    # Default Kibana configuration for docker target
    server.name: kibana
    server.host: "0"
    # 原:elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    # 新:(elasticsearch服务所在的ip)
    elasticsearch.hosts: [ "http://192.168.0.199:9200" ]
    monitoring.ui.container.elasticsearch.enabled: true
    

    3. 安装Logstash

    # 创建并启动logstash
    docker run -d -p 5044:5044 --name es_logstash logstash:7.8.0
    # 进入容器
    docker exec -it es_logstash bash
    # 编辑配置
    vi config/logstash.yml
    # 添加配置,保存并重启
    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.url: http://192.168.0.199:9200
    xpack.monitoring.elasticsearch.username: elastic
    xpack.monitoring.elasticsearch.password: elastic
    

    修改pipeline下的logstash.conf文件

    docker exec -it es_logstash /bin/bash
    ls
    bin  config  CONTRIBUTORS  data  Gemfile  Gemfile.lock  lib  LICENSE  logstash-core  logstash-core-plugin-api  modules  NOTICE.TXT  pipeline  tools  vendor
    cd pipeline
    ls
    logstash.conf
    vi logstash.conf
    
    #原来的
    #========================================
    #input {
    #  beats {
    #    port => 5044
    #  }
    #}
    
    #output {
    #  stdout {
    #    codec => rubydebug
    #  }
    #}
    #========================================
    #添加的部分
    input {
            file {
                codec=> json
                    path => "/usr/local/*.json"
            }
    }
    filter {
      #定义数据的格式
      grok {
        match => { "message" => "%{DATA:timestamp}|%{IP:serverIp}|%{IP:clientIp}|%{DATA:logSource}|%{DATA:userId}|%{DATA:reqUrl}|%{DATA:reqUri}|%{DATA:refer}|%{DATA:device}|%{DATA:textDuring}|%{DATA:duringTime:int}||"}
      }
    }
    output {
       elasticsearch{
         hosts=> "http://192.168.0.199:9200"
       }
    }
    

    4. 安装ElasticSearch-Head

    • 执行:docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5-alpine
    • 访问http://ip:9100,进入界面点击连接发现连接不上ES
    • 在ES容器配置跨域处理即可连接
    # 处理方式1:在创建ES容器时直接指定跨域配置
        docker run -d -p 9200:9200 -p 9300:9300 -e "http.cors.enabled=true" -e "http.cors.allow-origin=*" -e "discovery.type=single-node" --name elasticsearch elasticsearch:7.8.0
    
    # 处理方式2:进入ES容器内,修改/config/elasticsearch.yml
        # 进入ES容器内
        docker exec -it elasticsearch bash
        # 编辑config/elasticsearch.yml
        vi config/elasticsearch.yml
        # config/elasticsearch.yml添加跨域配置
        http.cors.enabled: true
        http.cors.allow-origin: "*"
        # 重启ES容器
        docker restart elasticsearch
    

    博客参考:
    https://www.jianshu.com/p/3c90f144775f
    https://www.jianshu.com/p/a0bd70301eec
    https://www.jianshu.com/p/66db4d660d9c
    https://blog.csdn.net/devcloud/article/details/99681107(最简单运行)
    elasticsearch.yml配置详解https://www.jianshu.com/p/c6f3368c13a3

  • 相关阅读:
    MVC身份验证及权限管理
    EasyPR--开发详解
    ASP.NET 安全认证
    将Excel导入到数据中
    ExtJS 4 树
    ExtJS 4 表单
    ExtJS 4 Grids 详解
    ExtJS 4 类系统
    第4章 类型基础 -- 4.1 所有类型都从System.Object派生
    随滚动条浮动的链接块层
  • 原文地址:https://www.cnblogs.com/new-life/p/13390731.html
Copyright © 2020-2023  润新知