容器服务中使用ELK

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 容器服务中使用ELK 日志是IT系统的重要组成部分,记录了系统在什么时候发生了什么事情。我们可以根据日志排查系统故障,也可以做统计分析。通常日志存放在本机的日志文件里,需要查看日志的时候,登录到机器上,用grep等工具过滤关键字。但是当应用要部署在多台机器上的时候,这种方式查看日志就很不方便了,为

容器服务中使用ELK

日志是IT系统的重要组成部分,记录了系统在什么时候发生了什么事情。我们可以根据日志排查系统故障,也可以做统计分析。通常日志存放在本机的日志文件里,需要查看日志的时候,登录到机器上,用grep等工具过滤关键字。但是当应用要部署在多台机器上的时候,这种方式查看日志就很不方便了,为了找到一个特定的错误对应的日志,不得不登录到所有的机器上,一个文件一个文件的过滤。于是出现了集中式的日志存储方式:所有日志收集到日志服务里,在日志服务里可以查看和搜索日志。

在Docker环境里,集中式日志存储更加重要。相比传统的运维模式,Docker通常使用编排系统管理容器,容器和宿主机之间的映射并不固定,容器也可能不断的在宿主机之间迁移,登录到机器上查看日志的方式完全没法用了,集中式日志成了唯一的选择。

容器服务集成了阿里云日志服务,通过声明的方式自动收集容器日志到日志服务。但是有些用户可能更喜欢用elasticsearch、logstash、kibana这个组合,这篇文章我就介绍下如何在容器服务里使用ELK。

整体结构

elk

我们要部署一个独立的logstash集群,logstash比较重,很耗资源,所以不会在每台机器上都运行logstash,更不要说每个Docker容器里。为了采集容器日志,我们会用到syslog、logspout和filebeat,当然你还可能会用到其他的采集方式。

为了尽可能贴合实际场景,这里我们创建两个集群,一个ELK集群,只部署ELK,另外一个应用集群,用于部署应用。

部署ELK

在容器服务里部署elasticsearch非常简单。使用下面的编排文件一键部署。

注意:elasticsearch需要2g以上的内存,部署ELK的机器内存至少4G,最好8G

注意:为了能让其他服务想logstash发送日志,我们在logstash前面配置了slb。先到slb控制台创建一个slb,监听端口5000和5044,不用添加后端服务。*不要忘了修改编排文件中的slb id

version: '2'
services:
  elasticsearch:
    image: elasticsearch

  kibana:
    image: kibana
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200/
    labels:
      aliyun.routing.port_5601: kibana
    links:
      - elasticsearch

  logstash:
    image: registry.cn-hangzhou.aliyuncs.com/acs-sample/logstash
    hostname: logstash
    ports:
      - 5044:5044
      - 5000:5000
    labels:
      aliyun.lb.port_5044: 'tcp://${SLB_ID}:5044' #先创建slb
      aliyun.lb.port_5000: 'tcp://${SLB_ID}:5000'
    links:
      - elasticsearch

在这个编排文件里,elasticsearch和kibana我们直接使用了官方镜像,没有任何更改。logstash需要配置文件,所以不得不自己做了一个镜像,把配置文件放进去。镜像源码在这里:https://github.com/AliyunContainerService/demo-logstash , logstash的配置文件如下

input {
    beats {
        port => 5044
        type => beats
    }

    tcp {
        port => 5000
        type => syslog
    }

}

filter {
}

output {
    elasticsearch { 
        hosts => ["elasticsearch:9200"]
    }

    stdout { codec => rubydebug }
}

这是一个非常简单的logstash配置,我们提供了syslog和filebeats两种输入格式,对外的端口分别是5044和5000。

slb_detail

好了,现在可以访问kibana看看。URL可以在应用的路由列表里找到。

Settings_Kibana

Excited!已经能打开kibana,不过还没有任何日志。接下来想办法写点日志到elasticsearch里。

收集日志

Docker里,标准的日志方式是用Stdout,所以我们先演示如何把Stdout收集到ELK,如果你在使用文件日志,可以直接用filebeat。我们用wordpress作为演示用的例子,下面是wordpress的编排模板。我们在另外一个集群中创建应用wordpress

version: '2'
services:
  mysql:
      image: mysql
      environment:
        - MYSQL_ROOT_PASSWORD=password

  wordpress:
      image: wordpress
      labels:
        aliyun.routing.port_80: wordpress
      links:
        - mysql:mysql
      environment:
        - WORDPRESS_DB_PASSWORD=password
      logging:
        driver: syslog
        options:
          syslog-address: 'tcp://${SLB_IP:5000'

待部署成功后,找到wordpress的访问地址,打开页面

wordpress

然后再打开kibana的页面,可以看到已经收集到日志了

kibana_3

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
78 4
|
2月前
|
人工智能 弹性计算 调度
阿里云容器服务 ACK 产品技术动态(202312)
容器服务 Kubernetes 版 ACK 【新功能】 Feature:支持基于机密虚拟机的 AI 模型推理保护 ACK 现已支持将基于 Intel® Trusted Domain Extension(Intel® TDX)技术的 ECS 实例加入 TDX 机密虚拟机计算节点池,使集群具备 TDX 机密计算能力,实现 AI 模型的可信推理和微调,保障模型数据的机密性与完整性。结合 PyTorch 与 Intel® AMX指令集,您可以在 32 核实例上实现秒级出图的推理能力。
454 1
|
2月前
|
运维 Kubernetes Serverless
阿里云容器服务
小陈在大刘的指导下学习Kubernetes,发现搭建和维护Kubernetes集群有一定难度。大刘建议小陈考虑使用阿里云的容器服务ACK,它基于Kubernetes,但进行了云原生优化,简化了集群管理和运维工作。ACK有三种形态:专有版、托管版和Serverless版。小陈认为ACK Serverless更适合,因为它无需运维,开箱即用,适合专注于业务开发。ACK Serverless基于弹性容器实例ECI,提供无服务器的容器运行环境,支持Kubernetes兼容,降低了使用门槛。
|
2月前
|
弹性计算 运维 Kubernetes
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
轻量应用服务器是深受个人和普通企业用户亲耐的一款轻量级云服务器产品,提供精品应用一键部署,支持一站式的域名、网站、安全、运维、应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛。轻量容器服务是专为学生、个人开发者等用户打造的轻量级容器服务,帮助您在云上快速了解容器和Kubernetes(简称K8s)相关的基础概念和轻松进行入门实践。本文为大家介绍一下阿里云轻量应用服务器与轻量容器服务的区别以及收费标准,以供参考。
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
|
2月前
|
人工智能 运维 Kubernetes
期待已久!阿里云容器服务 ACK AI 助手正式上线
期待已久!阿里云容器服务 ACK AI 助手正式上线
|
2月前
|
容器
阿里云容器服务 ACK 产品技术动态(202312)
阿里云容器服务 ACK 产品技术动态(202312)
|
2月前
|
存储 缓存 Kubernetes
阿里云容器服务助力万兴科技 AIGC 应用加速
阿里云容器服务助力万兴科技 AIGC 应用加速
|
2月前
|
Kubernetes Cloud Native 安全
高光回眸:阿里云容器服务如何全面助力精彩亚运
高光回眸:阿里云容器服务如何全面助力精彩亚运
65571 4
|
2月前
|
容器
阿里云容器服务 ACK 产品技术动态(202311)
阿里云容器服务 ACK 产品技术动态(202311)