容器服务中使用ELK

本文涉及的产品
容器镜像服务 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搭建和管理企业级网站应用
目录
相关文章
|
JSON 监控 关系型数据库
Docker 容器日志分析
Docker 容器日志分析
391 0
|
JSON 数据格式 Docker
ELK收集多个docker容器日志(十二)
filebeat收集容器日志 现在很多公司都是用docker容器来运行服务,一台机器上会有很多个docker,docker容器里面的日志也需要收集分析,filebeat也有docker容器的日志收集方案 官方配置地址https://www.elastic.co/guide/en/beats/filebeat/6.6/filebeat-input-docker.html
621 0
ELK收集多个docker容器日志(十二)
|
3月前
|
Prometheus 监控 Cloud Native
Docker 容器监控
Docker 容器监控
95 0
|
JSON Java 数据格式
Docker容器的日志处理
我们都知道docker logs -f会将所有对应的服务日志输出到终端,无论服务的部署在哪个节点上,那么我现在提出一个问题,是否每个节点对应的容器文件,都会保存该服务的完整日志备份,还是只保存该节点服务对应容器产生的日志?
535 0
Docker容器的日志处理
|
数据安全/隐私保护 Docker 容器
Docker容器实战【四】阿里云容器服务
harbor虽好,但许多公司的生产环境仍然采用的是云服务,这节课我们就来学习本地Docker如何使用云服务,将本地镜像推送到云平台。
791 0
Docker容器实战【四】阿里云容器服务
|
Java 容器
实战小技巧10:不可变容器
不可变容器,看着好像在实际的业务中不怎么会用到,但实则不然,相信每个小伙伴都用过,或者看到过下面的代码
155 0
|
JSON 监控 Cloud Native
容器日志管理:从 docker logs 到 ELK/EFK
监控和日志历来都是系统稳定运行和问题排查的关键,在微服务架构中,数量众多的容器以及快速变化的特性使得一套集中式的日志管理系统变成了生产环境中一个不可获取的部分。此次话题我们会集中在日志管理方面,本篇会介绍Docker自带的logs子命令以及其Logging driver,然后介绍一个流行的开源日志管理方案ELK/EFK。
容器日志管理:从 docker logs 到 ELK/EFK
|
容器 Docker 监控
容器日志管理:从docker logs到ELK/EFK
监控和日志历来都是系统稳定运行和问题排查的关键,在微服务架构中,数量众多的容器以及快速变化的特性使得一套集中式的日志管理系统变成了生产环境中一个不可获取的部分。此次话题我们会集中在日志管理方面,本篇会介绍Docker自带的logs子命令以及其Logging driver,然后介绍一个流行的开源日志管理方案ELK/EFK。
3297 1
容器日志管理:从docker logs到ELK/EFK
|
存储 监控 时序数据库
Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容。 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的运行情况如:CPU使用率、内存使用率、网络状态、磁盘空间等一系列随时间变化的时序数据信息,都是需要去了解,因此监控是必须的。
1787 0
|
消息中间件 监控 Kubernetes
关于k8s集群容器日志收集的总结
容器日志存在形式 目前容器日志有两种输出形式: 1、 stdout,stderr标准输出 这种形式的日志输出我们可以直接使用docker logs查看日志,k8s集群中同样集群可以使用kubectl logs类似的形式查看日志。
4289 1