Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志

2023-12-13 23:38

本文主要是介绍Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

Elasticsearch是一个开源搜索引擎,以易用性着称。kibana是一个图形界面,可以在上面条件检索存储在ElasticSearch里数据,相当于提供了ES的可视化操作管理器。

fluentd

fluentd是一个针对日志的收集、处理、转发系统。通过丰富的插件系统,可以收集来自于各种系统或应用的日志,转化为用户指定的格式后,转发到用户所指定的日志存储系统之中。

fluentd 常常被拿来和Logstash比较,我们常说ELK,L就是这个agent。fluentd 是随着Docker,GCP 和es一起流行起来的agent。

这篇文章里概括一下的话,有以下区别:

  • fluentd 比 logstash 更省资源;
  • 更轻量级的 fluent-bid 对应 filebeat,作为部署在结点上的日志收集器;
  • fluentd 有更多强大、开放的插件数量和社区。插件列表这一点值得多说,插件太多了,也非常灵活,规则也不复杂。

 

基本的架构

 

 

这里主要解决的问题是日志查询,日志来源是docker。我们使用docker部署任务时,可以使用docker logs -f <容器id>查看日志,也可以去/var/lib/docker/containers/<容器id>/<容器id>-json.log查看日志文件。但是这都很难去做查询,本文介绍的EFK就可以解决这个问题。

我们会创建四个容器:

  • httpd (发送日志给EFK)
  • Fluentd
  • Elasticsearch
  • Kibana

 

环境说明:

请安装最新的docker及docker-compose,老版本会有些问题。

docker安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11771657.html

docker-compose安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/12377113.html

 

操作系统:centos 7.6

配置:2核8g

docker版本:19.03.6

docker-compose版本:1.24.1

 

本文使用一台centos7.6服务器,来演示EFK。

注意:内存至少在4g或者以上。

 

二、docker-compose运行EFK

目录结构

 创建一个空目录

mkdir /opt/efk/

目录结构如下:

./
├── docker-compose.yml
└── fluentd├── conf│   └── fluent.conf└── Dockerfile

 

docker-compose.yml

version: '2'
services:web:image: httpdports:- "1080:80" #避免和默认的80端口冲突links:- fluentdlogging:driver: "fluentd"options:fluentd-address: localhost:24224tag: httpd.accessfluentd:build: ./fluentdvolumes:- ./fluentd/conf:/fluentd/etclinks:- "elasticsearch"ports:- "24224:24224"- "24224:24224/udp"elasticsearch:image: elasticsearch:7.6.0environment:- discovery.type=single-nodeexpose:- 9200ports:- "9200:9200"kibana:image: kibana:7.6.0links:- "elasticsearch"ports:- "5601:5601"
View Code

注意:elasticsearch 7.6.0要使用单机模式,必须传入环境变量discovery.type=single-node

 

所有web里的日志会自动发送到fluentd-address: localhost:24224,也就是fluentd容器。

Elasticsearch 和 Kibana是目前最新的版本7.6.0,如果想要选择更新的,可以去这里查看

Elasticsearch image tags in DockerHub

Kibana image tags in DockerHub

 

Fluentd的配置和插件

新建文件fluentd/Dockerfile,使用官方镜像Fluentd’s official Docker image,安装需要的插件

# fluentd/Dockerfile
FROM fluent/fluentd:v0.12-debian
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-rdoc", "--no-ri", "--version", "1.9.7"]

 

然后新建文件fluentd/conf/fluent.conf,编写Fluentd的配置文件

<source>@type forwardport 24224bind 0.0.0.0
</source>
<match *.**>@type copy<store>@type elasticsearchhost elasticsearchport 9200logstash_format truelogstash_prefix fluentdlogstash_dateformat %Y%m%dinclude_tag_key truetype_name access_logtag_key @log_nameflush_interval 1s</store><store>@type stdout</store>
</match>
View Code

官方设置文档config-file

 

修改/etc/sysctl.conf 

此参数一定要改,否则Elasticsearch 无法启动

vm.max_map_count = 2621440

加载配置

sysctl -p

 

启动容器

在后台启动,使用docker-compose up -d

# docker-compose up -d
Starting efk_elasticsearch_1 ... done
Starting efk_fluentd_1       ... done
Starting efk_kibana_1        ... done
Starting efk_web_1           ... done

 

查看所有容器

# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                          NAMES
d82b1a16c970        httpd                 "httpd-foreground"       21 hours ago        Up 51 minutes       0.0.0.0:1080->80/tcp                                           efk_web_1
1085be0f9c6e        efk_fluentd           "tini -- /bin/entryp…"   21 hours ago        Up 51 minutes       5140/tcp, 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp   efk_fluentd_1
3e837917f4cf        kibana:7.6.0          "/usr/local/bin/kiba…"   21 hours ago        Up 51 minutes       0.0.0.0:5601->5601/tcp                                         efk_kibana_1
3d860ca7e0db        elasticsearch:7.6.0   "/usr/local/bin/dock…"   21 hours ago        Up 51 minutes       0.0.0.0:9200->9200/tcp, 9300/tcp                               efk_elasticsearch_1

 

产生日志

使用curl执行3遍

curl http://localhost:1080/
curl http://localhost:1080/
curl http://localhost:1080/

 

查看日志

打开http://localhost:5601,提示需要先建索引,输入fluentd-*刷新即可

 

 

选择时间戳

 

 

 

 去Discover页面,然后就可以看到之前的日志了。

 

 

如何接入其他docker日志

这里是以docker-compose形式启动的一个服务,如果还有别的任务需要将日志发送到fluentd,需要这几个步骤。

默认情况下,docker-compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问。

所以我们首先需要找到我们现在创建的EFK的网络名,

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
afa576d45dff        bridge              bridge              local
27d56becedb8        efk_default         bridge              local
1d5b4653e1df        host                host                local
901f8a349049        none                null                local

 

我是在efk目录下创建的docker-compose.yml文件,所以这里默认的名字就是efk_default。

再看看之前web的设置

web:image: httpdports:- "1080:80" #避免和默认的80端口冲突links:- fluentdlogging:driver: "fluentd"options:fluentd-address: localhost:24224tag: httpd.access

有几个关键设置是:links和logging,link 用于容器直接的互通,logging则是日志的输出设置。

那我们这里再启动一个新docker需要这些设置

docker run \--link efk_fluentd_1 \--net efk_default  \--log-driver=fluentd \--log-opt fluentd-address=localhost:24224 \--log-opt tag=httpd.access \-d hello-world

我们去kibana看看,果然,日志已经发送到kibana了。

搜索hello

如果是其他机器,需要指定fluentd ip,比如:

docker run \--log-driver=fluentd \--log-opt fluentd-address=172.19.155.138:24224 \--log-opt tag=httpd.access \-d hello-world

 

最后想要做的就是如何在一台服务器上搜集所有的日志,理论上来说,只需要一台服务器部署上EFK,暴露端口,其他服务器去发送即可,实际上还没试过。

 

本文参考链接:

https://zhuanlan.zhihu.com/p/63105931

这篇关于Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490361

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的