Beats:在Docker里运行Filebeat

Docker是一套平台即服务(PaaS)产品,它使用操作系统级虚拟化来以称为容器的软件包交付软件。容器彼此隔离,并将它们自己的软件,库和配置文件捆绑在一起; 他们可以通过定义明确的渠道相互交流。所有容器都由单个操作系统内核运行,因此比虚拟机更轻便。在目前的很多IT的架构中,Docker的使用越来越普及。这很好,但是一旦有多个容器散布在多个节点上,就需要找到一种方法来跟踪其运行状况,存储,CPU和内存使用情况,网络负载等。

要跟踪这些指标,您需要一个有效的监视解决方案和一些后端存储,以保留容器数据以进行后续分析和处理。 在生产中管理数千个Docker容器使得Docker容器监视是我们集群管理流程的重要补充。Elastic Stack 提供了很方便的功能来供我们对Docker进行监控。

在今天的文章中,我们来讲述如何对Docker里的日志进行监控。我们的配置情况如下:

在上面,我们在Host OS里安装我们的Elastic Stack: Elasticsearch及Kibana。我们也同时安装自己的filebeat docker。

 

安装

安装Docker

根据自己的操作系统安装Docker:

Elastic Stack

对于还没安装Elasticsearch和Kibana的开发者来说,你可以参考我之前的文章“Elastic:菜鸟上手指南”来安装Elasticsearch及Kibana。在我们安装Elasticsearch时,我们需要对config/elasticsearch.yml作如下的配置:

node.name: node1
network.host: _site_
discovery.seed_hosts: ["192.168.43.220"]
cluster.initial_master_nodes: ["node1"]

请注意在上面在discrovery.seed_hosts里的IP地址192.168.43.220就是我电脑的私有IP地址。在上面我们把network.host设置为_site_,表明我们的Elasticsearch将会绑定到我们的私有IP地址上。请参阅network.host。这个私有IP地址我们可以通过如下的方法获得:

ifconfig | grep 192

修改完后,我们重新启动我们的Elasticsearch,我们将可以看到:

我们可以在上面的地址找到启动的Elasticsearch。

同样地,我们也需要对我们的Kibana进行配置。我们修改config/kibana.yml:

server.host: "192.168.43.220"
elasticsearch.hosts: ["http://192.168.43.220:9200"]

我们需要根据自己电脑实际的IP地址来替换上面的IP地址192.168.43.220。等修改完后,我们重新启动kibana:

如果我们上面配置正确,我们可以在浏览器中看到Kibana的界面。请注意:你需要替换上面的IP地址为自己电脑的IP地址。

 

Filebeat Docker

可从Elastic Docker注册表中获取Filebeat的Docker映像。 基本映像是centos:7

所有已发布的Docker映像和标签的列表可在www.docker.elastic.co中获得。

这些图像在Elastic许可下可免费使用。 它们包含开放源代码和免费的商业功能以及对付费商业功能的访问。 开始进行30天的试用,以试用所有付费商业功能。 有关弹性许可级别的信息,请参阅“订阅”页面。

下载镜像

获得Docker的Filebeat就像对Elastic Docker注册表发出docker pull命令一样简单。

docker pull docker.elastic.co/beats/filebeat:7.6.0
$ docker pull docker.elastic.co/beats/filebeat:7.6.0
7.6.0: Pulling from beats/filebeat
c808caf183b6: Already exists 
6e4ed7f6b86b: Pull complete 
f04c35d0ab5f: Pull complete 
5e59ec2a38db: Pull complete 
827556baec23: Pull complete 
79d4dc2f12c1: Pull complete 
f992afe857d6: Pull complete 
Digest: sha256:139ccd9e6585a6e2f375367834afe46fadf2525425f5e436fe5d1455597d16d6
Status: Downloaded newer image for docker.elastic.co/beats/filebeat:7.6.0
docker.elastic.co/beats/filebeat:7.6.0

或者,您可以下载其他仅包含Apache 2.0许可下可用功能的Docker映像。 要下载图像,请访问www.docker.elastic.co。在上面我们下载的是filebeat 7.6.0版本。这个版本需要和我们的Elasticsearch的版本一致。你可以根据自己的版本需求修改上面的命令。

 

运行Filebeat setup

使用setup命令运行Filebeat将创建索引模式并加载可视化效果,仪表板和机器学习作业。 运行以下命令:

docker run \
docker.elastic.co/beats/filebeat:7.6.0 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]

在上面,我们需要根据自己的filebeat版本修改上面的版本信息。我们也需要根据自己实际的Elasticsearch的端口地址进行修改。比如,针对我们的情况,我们把Elasticsearch部署在本地,那么上面的elasticsearch:9000应该修改为192.168.43.220:9200。那么上面的命令为:

docker run \
docker.elastic.co/beats/filebeat:7.6.0 \
setup -E setup.kibana.host=192.168.43.220:5601 \
-E output.elasticsearch.hosts=["192.168.43.220:9200"]

上面命令的显示结果为:

$ docker run \
> docker.elastic.co/beats/filebeat:7.6.0 \
> setup -E setup.kibana.host=192.168.43.220:5601 \
> -E output.elasticsearch.hosts=["192.168.43.220:9200"]
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.

Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html
Loaded machine learning job configurations
Loaded Ingest pipelines

如果你看到和我一样的输出,则表明你的配置是正确的。在上面我们已经成功地运行了filebeat setup这个命令。更多关于这个命令的介绍,可以参阅我之前的文章“Beats:Beats 入门教程 (二)”。

对docker里的filebeat进行配置

Docker映像提供了几种配置Filebeat的方法。 传统方法是通过卷挂载提供配置文件,但也可以创建包含配置的自定义映像。

配置文件示例
下载此示例配置文件作为起点:

curl -L -O https://raw.githubusercontent.com/elastic/beats/7.6/deploy/docker/filebeat.docker.yml

上面命令下载的filebeat.docker.yml文件内容如下:

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
- add_cloud_metadata: ~

setup.kibana.host: "192.168.43.220:5601"

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: '${ELASTICSEARCH_USERNAME:}'
  password: '${ELASTICSEARCH_PASSWORD:}'

我们通过修改这个文件把我们想要的filebeat.yml文件的配置写进来,比如elasticsearch的地址。针对我的情况,我填写“192.168.43.220:9200”。然后通过下面的卷挂载的办法来完成。 请注意:我们在上面也填写了kibana的地址。

卷挂载安装配置

在Docker上配置Filebeat的一种方法是通过卷挂载提供filebeat.docker.yml。 使用docker run,可以像这样指定卷挂载。

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  docker.elastic.co/beats/filebeat:7.6.0 filebeat -e -strict.perms=false \
  -E output.elasticsearch.hosts=["elasticsearch:9200"]  

在上面elasticsearch指的是我们的elasticsearch的地址。我们需要根据我们自己的情况来进行替换。针对我的情况,我填入我的Elasticsearch的IP地址192.168.43.220,那么我们的命令就是:

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  docker.elastic.co/beats/filebeat:7.6.0 filebeat -e -strict.perms=false \
  -E output.elasticsearch.hosts=["192.168.43.220:9200"]  

在运行上面的命令时,在terminal中,我们必须先进入到filebeat.docker.yml文件所处在的目录下,再运行上面的命令:

$ docker run -d \
>   --name=filebeat \
>   --user=root \
>   --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
>   --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
>   --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
>   docker.elastic.co/beats/filebeat:7.6.0 filebeat -e -strict.perms=false \
>   -E output.elasticsearch.hosts=["192.168.43.220:9200"]  
42bf95b5c41e0b80ca91a3cf9ddde74f474cb7eeeffd34f605ee7bd1be1b8c7e

我们可以通过如下的命令来查看我们的docker正在运行:

$ docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS               NAMES
42bf95b5c41e        docker.elastic.co/beats/filebeat:7.6.0   "/usr/local/bin/dock…"   47 seconds ago      Up 47 seconds                           filebeat

我们可以看见一个叫做filebeat的container已经被成功运行。我们可以通过如下的命令来查看container里的filebeat.yml的内容:

$ docker exec -it filebeat /bin/bash

这样我们就进入到名字叫做filebeat的container中了:

$ docker exec -it filebeat /bin/bash
[root@00bef51abf02 filebeat]# 

我们可以通过如下的命令来进行查看我们的filebeat.yml文件:

显然,在上面我们可以清楚地看到上面的这个filebeat.yml的内容就是我们之前的那个filebeat.docker.yml文件的内容,也就是说我们已经成功地把我们的文件挂载过来了。

至此我们已经成功地在docker里部署了我们的filebeat。

 

监控container里的系统日志

在上面我们已经成功地进入到container里去了。我们可以执行如下的命令:

./filebeat modules enable system

这样我们就启动了我们的system模块。然后我们打入exit命令退出bash。我们可以通过如下的命令重新启动名字叫做filebeat的容器:

$ docker restart filebeat

这个时候,我们可以在我们的Kibana里的Discover来查看我们收集的container的system日志:

 

我们可以看到我们想要的系统日志。我们可以看到container.name等信息:

很多人觉得部署filebeat容器没有那么必要,甚至觉得直接在host里部署一个就可以直接使用了。我个人认为,在docker里的filebeat有下面几个用途:

  • 部署一个或一些微服务在filebeat容器里。这样我们可以对这些服务进行监控。你可以发现一个很好的例子
  • 在docker里的filebeat也可以同时对host里的文件进行监控,可以通过挂载的办法。这样我们不必要在host进行部署filebeat。
  • 在docker里的filebeat很容易部署,并且很容易和生产环境下的elasticsearch docker一起协作,通过docker-compose一键部署。你可以发现一个很好的例子

 

参考

【1】https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html

【2】https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach

【3】https://github.com/xeraa/java-logging

【4】https://github.com/spinscale/elastic-stack-meetup-stream/

展开阅读全文

没有更多推荐了,返回首页

应支付0元
点击重新获取
扫码支付

支付成功即可阅读