docker compose 部署ELK

ELK(Elasticsearch, Logstash, Kibana)是一套用于日志管理和分析的开源工具组合。Elasticsearch是一种分布式搜索和分析引擎,Logstash是一种服务器端数据处理管道,Kibana是一个数据可视化工具。在本文中,我们将使用Docker Compose来部署ELK,以简化部署过程并提供可扩展性。

准备工作

在开始之前,我们需要提前安装Docker和Docker Compose。你可以在官方网站上找到适合你操作系统的安装包并按照说明进行安装。

创建Docker Compose文件

首先,我们需要创建一个名为docker-compose.yml的文件,用于描述我们的ELK部署。

version: "3"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300

  logstash:
    image: docker.elastic.co/logstash/logstash:7.13.1
    container_name: logstash
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    ports:
      - 5000:5000

  kibana:
    image: docker.elastic.co/kibana/kibana:7.13.1
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - 5601:5601

在这个文件中,我们定义了三个服务:elasticsearch、logstash和kibana。每个服务都使用了Elasticsearch提供的官方镜像,并分别指定了容器名称、端口映射和其他必要的环境变量。

配置Logstash

接下来,我们需要创建一个logstash.conf文件,用于配置Logstash的数据处理管道。

input {
  tcp {
    port => 5000
    codec => json
  }
}

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

在这个配置文件中,我们定义了一个TCP输入插件,监听端口5000,并使用JSON编解码器解析输入数据。然后,我们将数据输出到Elasticsearch中。

启动ELK

现在,我们可以使用Docker Compose启动ELK了。在终端中,进入到包含docker-compose.yml文件的目录,并执行以下命令:

docker-compose up -d

这将启动ELK的三个服务,并将它们放入后台运行。你可以使用以下命令检查容器是否正常运行:

docker-compose ps

如果一切正常,你应该看到elasticsearch、logstash和kibana这三个容器处于运行状态。

配置数据源

在ELK正常运行后,我们需要将日志数据导入到Logstash中。这里以一个简单的Node.js应用程序为例。

首先,我们需要安装winstonwinston-logstash这两个Node.js模块:

npm install winston winston-logstash

然后,我们可以编写一个简单的Node.js脚本来生成一些日志,并将它们发送到Logstash。

const winston = require('winston');
require('winston-logstash');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.Logstash({
      mode: 'udp',
      host: 'localhost',
      port: 5000
    })
  ]
});

logger.info('Hello, ELK!');

在这个脚本中,我们使用了winston模块来创建一个日志记录器,并将日志输出到Logstash的UDP端口。

查看日志

现在,我们可以使用Kibana来查看和分析我们的日志数据了。

在浏览器中访问http://localhost:5601,你将会看到Kibana的登录界面。默认的用户名和密码都是elastic。请注意,首次登录时,你需要选择一个索引模式来配置Kibana的初始设置。

在索引模式设置页面上,输入`log