前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小识牛刀:Docker+ELK打造微服务日志收集平台

小识牛刀:Docker+ELK打造微服务日志收集平台

作者头像
烟雨平生
发布2023-03-07 14:47:58
1.2K0
发布2023-03-07 14:47:58
举报
文章被收录于专栏:数字化之路数字化之路
好看的东西在这边--中国.上海.浦东.迪士尼

原文链接:https://dzone.com/articles/deploying-springboot-in-ecs-part-1

作者:Joydip Kumar

译者:helloworldtang

名词解析: EC2(Elastic Compute Cloud):亚马逊弹性计算云,是一个让使用者可以租用云端主机运行所需应用的系统。 阿里云中同类的服务,名字是ECS(Elastic Compute Service):云服务器。

通过本文,你可以看到如何使用ELK Stack来实现系统的监控和日志记录,以及如何将多个微服务的日志收集到一个位置进行集中管理。

IT的重要阶段之一就是后期的生产阶段,而主要的挑战之一是锁定后期生产中的问题。当多个应用程序在不同的系统中“吐”出不同的日志时,就有一个重要的事情需要做:将它们收集到一个地方以便IT团队进行集中管理。此处,我们使用 ELKStack来解决这个问题。在本文中,我将介绍 ELK是什么,以及如何从不同的微服务中聚合日志并将它们推送到一个约定好的公共位置。

ELK是什么?

ELK是Elastic公司旗下三款开源产品ElasticSearchLogstashKibana 的缩写。

Elasticsearch是基于ApacheLucene的搜索引擎,它可以近实时地搜索、存储和分析大量数据。Elasticsearch可以安装在本地,也可以作为SaaS使用。

Logstash是日志聚合器,它使用一个pipeline 来接收输入,过滤数据,并推送日志输出。Logstash可以使用不同的输入插件从不同的源获取日志,并以期望的方式推送日志。

Kibana是一个用来可视化Elasticsearch数据的软件,是一个带有Elasticsearch的插件。ElasticsearchKibana可以部署为云服务,并在AWSGCP上托管。 Kibana也可以安装在本地基础设施中。本文中,我们将使用ELKDocker镜像并将其部署到EC2中。

架构设计:

在上面的设计中,不同的微服务都将“吐”出日志。我们会使用Syslog驱动程序将不同微服务生成的日志推送到Logstash,然后Logstash将过滤并推送日志到 Elasticsearch。最后,我们将在Kibana上看到所有的聚合日志。

EC2上部署ELK

我们将使用官方的Docker镜像,在操作系统为Ubuntu的EC2上部署ELK。 首先登录到EC2服务器,并在/home/ubuntu/目录中创建一个名为“elk”的目录。

按照以下步骤在EC2上安装Docker

cd到“elk”目录,并创建一个名为docker-compose.yml的文件:

代码语言:javascript
复制
version: '2'
services:
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
        ports:
            - '9200:9200'
            - '9300:9300'
    kibana:
        image: docker.elastic.co/kibana/kibana:6.3.2
        ports:
            - '5601:5601'
        depends_on:
            -  elasticsearch
    logstash:
        image: docker.elastic.co/logstash/logstash:6.3.2
        ports:
            - '25826:25826'
        volumes:
            - $PWD/elk-config:/elk-config
        command: logstash -f /elk-config/logstash.config
        depends_on:
            -  elasticsearch

Elasticsearch默认使用 mmapfs目录来存储索引。默认情况下,操作系统的 vm.max_map_count参数设置的都比较小,这就可能会导致Elasticsearch发生内存溢出。

在Linux上,你以 root身份执行以下命令来增加 limit值,以给 mmapfs分配最大内存:

代码语言:javascript
复制
sudo sysctl -w vm.max_map_count=262144

运行docker-compose up命令启动并运行 ELK服务。

通过访问 5601端口来验证 Kibana是否处于可用状态。如果你看到下面的页面,那就说明 Kibaba已经正常启动了:

Kibana上建立索引。 运行下面的命令并输入一些字符串:

代码语言:javascript
复制
例如: telnet  52.207.254.82  5826

一旦在Kibana上看到了在telnet终端上输入的字符串,这就意味着你已经可以连接到ELK了。 接下来,我们将看到如何将从微服务的日志推送到 ELK

配置Syslog日志驱动程序

为了从EC2中托管的微服务推送日志到Logstash,可以使用Syslog驱动程序。在本例中,我们将在EC2中运行这个用来打印日志的项目。

我们需要修改Ubuntu主机上的rsyslog.conf文件。

代码语言:javascript
复制
vi /etc/rsyslog.conf

取消UDPTCP连接部分的注释,修改成如下:

现在,在Spring Boot项目的 logback.xml文件中新增下面的配置:

代码语言:javascript
复制
<appender name=”SYSLOG” class=”ch.qos.logback.classic.net.SyslogAppender”>
    <syslogHost>{logstash host }</syslogHost>
    <port>{ logstash port 25826 }</port>
    <facility>LOCAL1</facility>
    <suffixPattern>[%thread] %logger %msg</suffixPattern>
</appender>

上面的配置会将系统“吐”出的日志推送到指定的Logstash。 如果这个项目是使用 Docker构建的,我们就需要使用docker run命令来添加日志驱动程序:

代码语言:javascript
复制
docker run –log-driver syslog –log-opt syslog-address=tcp://{logstashhost}:{logstashport}

启动服务器并访问 API,你就可以在 Kibana中看到日志了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 的数字化之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ELK是什么?
  • 在EC2上部署ELK
  • 配置Syslog日志驱动程序
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档