返回顶部
首页 > 资讯 > 后端开发 > Python >Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志
  • 794
分享到

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

日志EFKDocker 2023-01-31 08:01:43 794人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

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

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

fluentd

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

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

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

  • fluentd 比 logstash 更省资源;

  • 更轻量级的 fluent-bid 对应 filebeat,作为部署在结点上的日志收集器;

  • fluentd 有更多强大、开放的插件数量和社区。插件列表这一点值得多说,插件太多了,也非常灵活,规则也不复杂。

 

基本的架构

1.png

 

 

这里主要解决的问题是日志查询,日志来源是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或者以上。

 

目录结构

 创建一个空目录

mkdir /opt/efk/

目录结构如下:

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

 

docker-compose.yml

version: '2'
services:
  WEB:
    image: httpd
    ports:
      - "1080:80" #避免和默认的80端口冲突
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access

  fluentd:
    build: ./fluentd
    volumes:
      - ./fluentd/conf:/fluentd/etc
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
      - "24224:24224/udp"

  elasticsearch:
    image: elasticsearch:7.6.0
    environment:
      - discovery.type=single-node
    expose:
      - 9200
    ports:
      - "9200:9200"

  kibana:
    image: kibana:7.6.0
    links:
      - "elasticsearch"
    ports:
      - "5601:5601"

注意: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 forward
  port 24224
  bind 0.0.0.0
</source>
<match *.**>
  @type copy
  <store>
    @type elasticsearch
    host elasticsearch
    port 9200
    logstash_fORMat true
    logstash_prefix fluentd
    logstash_dateformat %Y%m%d
    include_tag_key true
    type_name access_log
    tag_key @log_name
    flush_interval 1s
  </store>
  <store>
    @type stdout
  </store>
</match>

官方设置文档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-*刷新即可

1.png

 

 

选择时间戳

1.png

 

 

 

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

1.png

 

 

如何接入其他docker日志

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

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

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

复制代码

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
afa576d45dff        bridge              bridge              local27d56becedb8        efk_default         bridge              local1d5b4653e1df        host                host                local
901f8a349049        none                null                local

复制代码

 

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

再看看之前web的设置

web:
    image: httpd
    ports:
      - "1080:80" #避免和默认的80端口冲突
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: 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

1.png

如果是其他机器,需要指定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


--结束END--

本文标题: Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志

本文链接: https://lsjlt.com/news/193675.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志
    Elasticsearch是一个开源搜索引擎,以易用性着称。kibana是一个图形界面,可以在上面条件检索存储在ElasticSearch里数据,相当于提供了ES的可视化操作管理器。fluentdfluentd是一个针对日志的收集、处理、转...
    99+
    2023-01-31
    日志 EFK Docker
  • Java如何通过jstack命令查询日志
    目录1 首先要清楚线程的状态1.1 线程状态变迁图:1.2 各状态说明:1.3 对于jstack日志,我们要着重关注如下关键信息1.4 Waiting on monitor entr...
    99+
    2023-03-21
    java jstack命令查询日志 java查询日志 jstack日志
  • Java怎么通过jstack命令查询日志
    本文小编为大家详细介绍“Java怎么通过jstack命令查询日志”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么通过jstack命令查询日志”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 首先要清楚...
    99+
    2023-07-05
  • Mysql通用查询日志和慢查询日志的示例分析
    小编给大家分享一下Mysql通用查询日志和慢查询日志的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL中的日志包...
    99+
    2024-04-02
  • Mysql慢查询日志的过程
    这篇文章主要介绍“Mysql慢查询日志的过程”,在日常操作中,相信很多人在Mysql慢查询日志的过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql慢查询日志的过程”...
    99+
    2024-04-02
  • 通过查询日志定位持有锁的SQL语句
    MYSQL 版本: mysql> select version(); +------------+ | version()  | +------------+ | 5.6.27-l...
    99+
    2024-04-02
  • 什么是MySQL通用查询和慢查询日志
    下面讲讲关于什么是MySQL通用查询和慢查询日志,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完什么是MySQL通用查询和慢查询日志这篇文章你一定会有所受益。MySQL中的日志包...
    99+
    2024-04-02
  • MySQL通用查询日志和慢查询日志有何区别及各自作用
    本文主要给大家介绍MySQL通用查询日志和慢查询日志有何区别及各自作用,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL通用查询日志和慢查询日...
    99+
    2024-04-02
  • MySQL错误日志与通用查询日志图文详析
    目录MySQL日志文件系统的组成启动错误日志查看错误日志删除错误日志通用查询日志删除通用查询日志通用查询日志的备份 总结MySQL日志文件系统的组成   &nbs...
    99+
    2024-04-02
  • 通过使用filebeat收集mysql慢查询日志详细步骤
    下文主要给大家带来通过使用filebeat收集mysql慢查询日志详细步骤,希望这些内容能够带给大家实际用处,这也是我编辑通过使用filebeat收集mysql慢查询日志详细步骤这篇文章的主要目的。好了,废...
    99+
    2024-04-02
  • 如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL
    如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 在 MYSQL 慢查...
    99+
    2024-04-02
  • docker mysql容器怎么开启慢查询日志
    这篇文章主要介绍docker mysql容器怎么开启慢查询日志,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、进入容器 登陆账号docker 查看 运行的容器docker ps进入容器:dock...
    99+
    2023-06-29
  • Navicat中查看MySQL通用查询日志的方法
    正常情况下,为了保证数据库的性能,通用查询日志处于不启用状态,并且在没开启过的情况下,磁盘中是不保存hostname.log的日志的。 1.查询日志状态 在Navica查询窗口中输入以下命令 show variables like 'gen...
    99+
    2023-08-17
    mysql 数据库
  • 如何通过shell脚本查看k8s日志
    这期内容当中小编将会给大家带来有关如何通过shell脚本查看k8s日志,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查看日志:kubectl logs -f podName --tail 100比如我们如...
    99+
    2023-06-26
  • java通过聚合查询实现elasticsearch的groupby后的数量
    通过聚合查询获取group by 后的数量 public static int getKeyCount(String key, String index) { ...
    99+
    2024-04-02
  • MySQL数据库——MySQL通用查询日志(General Query Log)
    通用查询日志(General Query Log)用来记录用户的所有操作,包括启动和关闭 MySQL 服务、更新语句和查询语句等。 默认情况下,通用查询日志功能是关闭的。可以通过以下命令查看通用查询日志是否开启,命令如下: mysql> S...
    99+
    2023-10-01
    数据库 mysql mybatis
  • MySQL错误日志与通用查询实例分析
    这篇文章主要介绍“MySQL错误日志与通用查询实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL错误日志与通用查询实例分析”文章能帮助大家解决问题。MySQL日志文件系统的组成&nbs...
    99+
    2023-06-29
  • 如何通过Xtrabackup日志来恢复检查点文件
    这篇文章将为大家详细讲解有关如何通过Xtrabackup日志来恢复检查点文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 前几天有个朋友问我的问题,是在xtrabac...
    99+
    2024-04-02
  • 如何通过阿里云服务器查看登录日志
    阿里云服务器提供了丰富的管理功能,其中就包括查看登录日志。登录日志可以记录下服务器的登录情况,包括用户、时间、IP地址等信息,对于服务器的安全管理非常有帮助。本篇文章将详细介绍如何通过阿里云服务器查看登录日志。 一、登录阿里云服务器首先,你...
    99+
    2023-11-19
    阿里 服务器 日志
  • Linux怎么通过命令查看日志文件的某几行
    这篇文章主要为大家展示了“Linux怎么通过命令查看日志文件的某几行”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux怎么通过命令查看日志文件的某几行”这篇文章吧。【一】从第3000行开始...
    99+
    2023-06-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作