ELKF——从零开始搭建部署ELKF日志系统-创新互联

ELKF简介

日志系统是一个很重要的系统,一个架构良好的日志系统,可以帮助开发者更清楚的了解服务器的状态和系统安全状况,从而保证服务器的稳定运行。目前,在大型的后端架构中,一个标准的数据采集方案通常被称为ELK,即ElasticSearch、Logstash和Kibana。为了更轻量级的收集数据,还引用了Filebeat。
所以,我们此次选择Elasticsearch + Logstash + filebeat + Kibana架构来进行演示。

创新互联拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕十年,专业且经验丰富。十年网站优化营销经验,我们已为成百上千中小企业提供了成都网站制作、网站设计解决方案,按需开发网站,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!

Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点,可用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 使用Java 基于 Lucene 开发,是现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建的。

Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

  1. 安装Elasticsearch

    docker拉取镜像,使用7.10.2版本。

    docker pull elasticsearch:7.10.2

    创建挂载目录,并给创建的文件夹授权。

    mkdir -p /worker/elk/elasticsearch
    #文件夹赋权
    sudo chown -R 777 /worker/elk/elasticsearch
    #这里注意:如果777权限不够,就给1000 : 1000权限

    执行docker run脚本

    docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es 镜像ID

    拷贝elasticsearch容器内部的配置到挂载目录

    docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /worker/elk/elasticsearch/
    docker cp es:/usr/share/elasticsearch/data /worker/elk/elasticsearch/

    修改elasticsearch.yml

    cluster.name: "es-master"
    network.host: 0.0.0.0
    # 0.0.0.0可表示监听所有IP
    http.host: 0.0.0.0
    # 跨越请求
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    删除容器

    docker rm -f es

    再次执行dokcer脚本启动elasticsearch,并设置挂载目录

    docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es \
         --restart=always \
         -e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
         -h elasticsearch \
         -v /worker/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
         -v /worker/elk/elasticsearch/data:/usr/share/elasticsearch/data \
         -e LANG=C.UTF-8 \
         -e LC_ALL=C.UTF-8 \
         镜像ID
        
        
    参数说明:
    -p 9200:9200:将容器的9200端口映射到宿主机9200端口
    -p 9300:9300:将容器的9300端口映射到宿主机9300端口,目的是集群互相通信
    --restart=always:docker重启自动启动
    -e "discovery.type=single-node":单例模式
    -e ES_JAVA_OPTS="-Xms128m -Xmx512m":配置内存大小,最小/大内存
    -v 挂载目录
  2. Kibana

    docker拉去镜像,使用7.10.2版本

    docker pull kibana:7.10.2

    创建挂载目录,并给创建的文件夹授权(与elasticsearch的创建过程类似)。

    mkdir -p /worker/elk/kibana
    #文件夹赋权
    sudo chown -R 777 /worker/elk/kibana

    执行docker run脚本

    sudo docker run -d --name kibana -p 5601:5601 镜像ID

    拷贝kibana容器内部的配置到挂载目录

    docker cp kibana:/usr/share/kibana/config /worker/elk/kibana/
    docker cp kibana:/usr/share/kibana/data /worker/elk/kibana/  

    修改kibana.yml配置文件

    server.name: kibana
    server.host: "0.0.0.0"
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    # 显示登陆页面
    monitoring.ui.container.elasticsearch.enabled: true
    # 语言
    i18n.locale: "zh-CN"

    删除容器

    docker rm -f kibana

    再次执行dokcer脚本启动kibana,并设置挂载目录

    docker run -d --name kibana -p 5601:5601 \
          --restart=always \
          --link es:elasticsearch \
          -h kibana \
          -v /worker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
          -v /worker/elk/kibana/data:/usr/share/kibana/data \
          镜像ID
          
    参数说明:
    --link:使用–link参数时,docker会自动在共享两个容器的变量。访问的时候,不再是通过IP的方式来访问,而是通过容器名来访问。上面访问es容器,可以直接elasticsearch:9200可以访问到es容器。
  3. Logstash

    docker拉去镜像,使用7.10.2版本

    docker pull logstash:7.10.2

    创建挂载目录,并给创建的文件夹授权。

    mkdir -p /worker/elk/logstash
    #文件夹赋权
    sudo chown -R 777 /worker/elk/logstash

    创建容器

    docker run -p 4560:4560 --name logstash -d 镜像ID

    拷贝logstash容器内部的配置到挂载目录

    docker container cp logstash:/usr/share/logstash/config /worker/elk/logstash 
    docker container cp logstash:/usr/share/logstash/pipeline /worker/elk/logstash
    docker container cp logstash:/usr/share/logstash/data /worker/elk/logstash

    修改logstash.yml的文件的默认配置,配置文件的路径(/worker/elk/logstash/config)

    http.host: "0.0.0.0"
    #允许监控
    xpack.monitoring.enabled: true
    xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

    修改logstash.conf的文件配置,配置文件的路径(/worker/elk/logstash/pipeline),根据具体情况配置

    # 监听5044端口作为输入源
    input {
      beats {
        port =>5044
      }
    }
    
    # 过滤
    filter {
      grok {
        match =>{ "message" =>"%{COMBINEDAPACHELOG}" }
      }
      date {
        match =>[ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
      }
    }
    
    # 输出到es
    output {
      elasticsearch {
        hosts =>["elasticsearch:9200"]
        # 索引名称,这里获取filebeat设置的参数
        index =>"%{[fields][service]}-%{+YYYY.MM.dd}"
      }
    
      stdout {
        codec =>rubydebug
      }
    }
    
    

    停止并删除容器

    docker rm -f logstash

    重新启动容器并设置挂载目录

    docker run -d \
        --name logstash \
        -p 5044:5044 \
        --restart=always \
        -h logstash \
        --link es:elasticsearch \
        -v /worker/elk/logstash/config:/usr/share/logstash/config \
        -v /worker/elk/logstash/pipeline:/usr/share/logstash/pipeline \
        镜像ID

    进入logstash容器,安装插件

    bin/logstash-plugin install logstash-codec-json_lines
  4. filebeat
    docker pull docker.elastic.co/beats/filebeat:7.10.2

    然后,执行docker启动脚本。

    docker run  -d --name filebeat -p 9000:9000 镜像ID

    接着,创建filebeat挂载目录,并给创建的文件授权。

    mkdir -p /worker/elk/filebeat
    sudo chown -R 777 /worker/elk/filebeat
    
    # 将容器内的文件复制到主机上。
    docker cp filebeat:/usr/share/filebeat/filebeat.yml /worker/elk/filebeat

    修改配置文件filebeat.yml

    filebeat.config:
      modules:
        path: ${path.config}/modules.d/*.yml
        reload.enabled: false
    
    processors:
      - add_cloud_metadata: ~
      - add_docker_metadata: ~
    
    filebeat.inputs:
    - type: tcp
      enabled: true
      # 设置参数
      fields:
        service: estate
      max_message_size: 10MiB
      host: "0.0.0.0:9000"
    
    # 输出到logstash
    output.logstash:
      hosts: ["logstash:5044"]
    

    删除容器

    docker rm -f filebeat

    接着,修改docker启动脚本,增加-v挂载目录。

    docker run  -d \
    	--name filebeat \
    	-p 9000:9000 \
    	-h filebeat \
    	-v /worker/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
    	--restart=always \
    	--link logstash:logstash \
    	-e TZ=Asia/Shanghai \
    	-e output.logstash.hosts=["logstash:5044"] \
        镜像ID
  5. 连接filebeat

    springboot项目连接filebeat做日志输出,地址为192.168.189.128:9000 (根据自己ip来),具体可以参考其他文章。

  6. 配置kibana

    进入kibana页面,地址为http://192.168.189.128:5601/ (根据自己ip来)。
    在这里插入图片描述

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/9075b03633ad43b48ae15a4dbeb5be6f.jpeg#pic_center输入logstash配置的索引index名称,点击下一步。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
看到已经有日志输出。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:ELKF——从零开始搭建部署ELKF日志系统-创新互联
本文链接:http://hbruida.cn/article/igsdj.html