有了所要收集和展示的信息的格式,接下来可以创建一套基本的日志基础设施,从各个正在运行的服务中收集和聚合日志,并提供查询和关联功能,目标是提供一个能够访问所有日志数据的集中式入口。
在配置完日志聚合功能后,所有服务就开始同时向中心化系统发送度量指标和日志信息了,这能够提高系统的可观测性。能够观察到运行系统的数据,并在需要对特定的请求进行检查和调试时深入挖掘和收集出更多的信息。
搭建一套通常被称作ELK(Elasticsearch、Logstash和Kibana)的解决方案,其中会使用到一个名为Fluentd的数据收集器。
服务将把所有日志信息重定向到STDOUT(标准输出),运行Fluentd守护进程的代理将负责把这些日志推送到Elasticsearch。
Elasticsearch是一个集中存储数据的查询和分析引擎,会对数据建立索引,对所存储的数据执行高效的检索和聚合操作。
Logstash是一个服务器端的处理流水线,支持从多个来源获取数据,并在将数据发送到Elasticsearch之前对其进行转换。
Fluentd是一个开源的数据收集器,将数据从服务推送到Elasticsearch。应结合Logstash的数据格式化和收集功能,并使用Fluentd推送数据。
Kibana是一款用于可视化展示Elasticsearch数据的界面工具,可以查询数据并探索数据之间的关联关系。
通过Docker Compose文件配置一套解决方案,在docker-compose.yml文件中定义一些的依赖项。向待增加日志基础设施的服务的Docker Compose文件添加Elasticsearch、Kibana和Fluentd容器。
version: '2.1'
services:
gateway:
container_name: simplebank-gateway
restart: always
build: ./gateway
ports:
- 5001:5000
volumes:
- ./gateway:/usr/src/app
links:
- "rabbitmq:simplebank-rabbitmq"
- "fluentd”
logging: --- 为每个服务添加一个logging指令以强制Docker将每个运行服务的容器的输出信息推送到Fluentd,而接下来Fluentd会确保将收到的数据推送到Elasticsearch
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: simplebank.gateway
(…)
kibana:
image: kibana --- 对于Kibana,使用Docker Hub的默认镜像和默认设置
links:
- "elasticsearch" --- 将Kibanan链接到Elasticsearch容器,因为它会消费Elasticsearch中的数据
ports:
- "5601:5601"
elasticsearch:
image: elasticsearch --- 与Kibana一样,Elasticsearch使用默认镜像
expose:
- 9200
ports:
- "9200:9200"
fluentd:
build: ./fluentd --- 通过定制的Docker镜像构建Fluentd
volumes:
- ./fluentd/conf:/fluentd/etc --- 将Fluentd的配置信息注入所创建的容器,可以调整默认配置
links:
- "elasticsearch" --- 将Fluentd容器与Elasticsearch容器链接起来,因为Fluentd会将数据推送到Elasticsearch
ports:
- "24224:24224"
- "24224:24224/udp"
Fluentd配置(fluentd/conf/fluent.conf),match代码段包含了所有需要的配置信息,以及所使用的格式,这些配置信息连接elasticsearch port和host。
完成所有必需的配置后,使用Docker Compose文件来启动服务了。
摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》
网友评论