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名称,点击下一步。
    在这里插入图片描述
    在这里插入图片描述

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
安装ELKF服务需要以下步骤: 1. 安装DockerDocker Compose 在Windows 10上安装DockerDocker Compose,请参考Docker官方文档。 2. 创建一个Docker Compose文件 在一个空白目录中创建一个名为“docker-compose.yml”的文件,并将以下内容添加到文件中: ``` version: '3.3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0 container_name: elasticsearch environment: - discovery.type=single-node ulimits: memlock: soft: -1 hard: -1 ports: - 9200:9200 - 9300:9300 volumes: - esdata:/usr/share/elasticsearch/data networks: - elk kibana: image: docker.elastic.co/kibana/kibana:7.10.0 container_name: kibana ports: - 5601:5601 environment: ELASTICSEARCH_HOSTS: http://elasticsearch:9200 networks: - elk logstash: image: docker.elastic.co/logstash/logstash:7.10.0 container_name: logstash volumes: - ./config/logstash/:/usr/share/logstash/pipeline/ - ./data/:/usr/share/logstash/data/ environment: LS_JAVA_OPTS: "-Xmx256m -Xms256m" ELASTICSEARCH_HOST: "http://elasticsearch:9200" ELASTICSEARCH_USERNAME: "elastic" ELASTICSEARCH_PASSWORD: "changeme" ports: - "5044:5044" networks: - elk volumes: esdata: driver: local networks: elk: ``` 请注意,此文件定义了三个服务:Elasticsearch、Kibana和Logstash,并将它们连接到一个名为“elk”的网络中。 3. 创建配置文件 在与Docker Compose文件相同的目录中创建一个名为“config”的子目录,并在其中创建一个名为“logstash.conf”的文件。将以下内容添加到文件中: ``` input { beats { port => 5044 } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { elasticsearch { hosts => [ "elasticsearch:9200" ] user => "elastic" password => "changeme" } } ``` 请注意,在这个例子中,我们使用了Apache日志格式作为示例,并将其与Grok插件一起使用来解析日志的字段。你可以根据自己的需求修改配置文件。 4. 启动服务 在命令行中进入到Docker Compose文件所在的目录,并运行以下命令: ``` docker-compose up -d ``` 这将启动Elasticsearch、Kibana和Logstash服务,并在后台运行。 5. 访问Kibana 在浏览器中打开“http://localhost:5601/”即可访问Kibana服务。 请注意,由于我们在Docker Compose文件中将端口“5601”映射到主机上的端口“5601”,因此可以在主机上访问该服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值