使用 Docker Compose 部署您的 ELK Stack

0 股票
0
0
0
0

介绍

本教程将指导您如何在运行 Ubuntu(版本 22.04)的服务器上使用 Docker Compose 安装 ELK Stack。ELK Stack 由 Elasticsearch、Kibana 和 Logstash 组成。.

  • Elasticsearch 是一款搜索和分析引擎。.
  • Kibana 是一个用于数据分析的用户界面。.
  • Logstash 可以分析应用程序相关的日志。.
先决条件
  • 运行 Ubuntu 22.04 或更高版本的服务器:需要具备对该服务器的 SSH 访问权限以及 root 或 sudo 用户权限
  • 具备 Docker、Docker Compose、ElasticSearch 和 YAML 的基础知识

步骤 1 – 安装 Docker Compose

如果您的服务器上已经安装了 Docker Compose,则可以跳过此步骤。首先,使用以下命令通过 SSH 连接到您的服务器:

ssh holu@<your_host>

请确保更新 apt 软件包并安装 cURL:

sudo apt-get update && sudo apt-get install curl -y

确保 curl 已安装后,我们可以使用 Docker 提供的快速安装脚本来安装 Docker 和 Docker Compose:

curl https://get.docker.com | sh

这条命令会从 get.docker.com 下载脚本,并将其“管道化”给 sh(将下载的脚本传递给 sh,sh 运行该脚本并安装 Docker)。最后,我们可以将自己添加到 Docker 用户组,这样每次使用 docker 命令时就无需使用 sudo 了。.

sudo usermod -aG docker holu

请务必注销并重新登录以应用更改。.

步骤 2 – 创建 docker-compose.yaml

文件 docker-compose.yaml 它将用于声明 ELK 技术栈的所有基础设施。它用于通过单个命令创建多个容器。.

在服务器上创建一个新文件夹,并创建一个文件 docker-compose.yaml 在其中创建:

mkdir elk-stack && cd elk-stack && touch docker-compose.yaml

我们希望使用 Docker Compose 创建三个 Docker 容器:


要创建这三个容器,请将以下内容添加到文件中。 docker-compose.yaml 添加:

version: "3"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
environment:
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- KIBANA_PASSWORD=${KIBANA_PASSWORD}
container_name: setup
command:
- bash
- -c
- |
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
# give the container a name
# this will also set the container's hostname as elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
# limits elasticsearch to 1 GB of RAM
- ES_JAVA_OPTS=-Xms1g -Xmx1g
# The password for the 'elastic' user
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.12.1
container_name: kibana
ports:
- 5601:5601
environment:
# remember the container_name for elasticsearch?
# we use it here to access that container
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
# Change this to true if you want to sent
# telemetry data to kibana developers
- TELEMETRY_ENABLED=false

我们目前缺少一个元素:.env 文件。.env 文件用于存储密码和 API 令牌等敏感信息,以便将其从配置或代码中移除。Docker Compose 会自动检测 .env 文件,并将类似 ${MY_VARIABLE} 的变量替换为环境变量。.

创建环境变量并添加以下几行:

ELASTIC_PASSWORD=<your-elastic-password>
KIBANA_PASSWORD=<your-kibana-password>

现在你可以运行 docker compose 来启动并运行所有内容:

docker compose up -d

输出:

[+] Running 3/4
⠇ Network elk-stack_default Created
:heavy_check_mark: Container kibana Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Started

您可以使用该命令 docker ps 用于检查一切是否按预期运行。.

holu@<your_host>:~/elk-stack$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id> docker.elastic.co/kibana/kibana:8.12.1 "<command>" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
<id> docker.elastic.co/elasticsearch/elasticsearch:8.12.1 "<command>" About a minute ago Up About a minute 9200/tcp, 9300/tcp elasticsearch

您现在可以通过在 Web 浏览器中输入以下命令来启动 Kibana。 :5601 在地址栏中打开。.

使用用户名 松紧带 以及之前保存在文件中的密码 .env 您已决定登录。.


如果您登录后看到此页面,请点击“自行探索”。.


现在您应该可以访问 Kibana 主页了。它看起来像这样:


步骤 3 – Logstash

现在是时候添加最后一块拼图了:Logstash。Logstash 可以分析应用程序的日志,并将分析后的日志发送到 Elasticsearch。.

docker-compose.yaml 在“kibana”下的“服务”部分中编辑并添加第四个容器。.

logstash:
image: docker.elastic.co/logstash/logstash:8.12.1
container_name: logstash
command:
- /bin/bash
- -c
- |
cp /usr/share/logstash/pipeline/logstash.yml /usr/share/logstash/config/logstash.yml
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 1; done;
echo "Starting logstash";
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
environment:
- xpack.monitoring.enabled=false
- ELASTIC_USER=elastic
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ELASTIC_HOSTS=http://elasticsearch:9200
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf

Logstash 的配置稍微复杂一些。你需要一个名为 logstash.conf 的额外配置文件。Logstash 基于一种叫做管道(pipeline)的机制运行。管道文件描述了 Logstash 的工作流程(日志来源、日志解析方式、日志发送目的地)。管道的配置信息就包含在 logstash.conf 文件中。.

这是最基本的东西之一:

input {
file {
path => "/var/log/dpkg.log"
start_position => "beginning"
}
}
filter { }
output {
elasticsearch {
hosts => "${ELASTIC_HOSTS}"
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { }
}

它的工作原理非常直观。它以一个文件(在本例中为 /var/log/dpkg.log)作为输入,并将输出发送到 Elasticsearch 和标准输出。.

将以上示例添加到您的 logstash.conf 文件中。.

elk-stack 目录现在应该包含以下文件:

elk-stack/
├── .env
├── docker-compose.yaml
└── logstash.conf

您现在可以使用以下命令启动 Logstash:

docker compose up -d

输出:

[+] Running 4/4
:heavy_check_mark: Container logstash Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Running
:heavy_check_mark: Container kibana Running

现在您可以从 Kibana 访问 Logstash。首先,您需要创建一个 Logstash 数据视图。.

前往«分析»发现页面。您应该会看到类似这样的内容:


点击“创建数据视图”按钮,创建您的数据视图:


保存数据视图后,您应该能够看到来自 Logstash 的报告:


步骤 4 – 销毁堆栈

最后,要停止堆栈并移除容器,请运行以下命令:

docker compose down

输出:

[+] Running 5/5
:heavy_check_mark: Container logstash Removed
:heavy_check_mark: Container elasticsearch Removed
:heavy_check_mark: Container kibana Removed
:heavy_check_mark: Container setup Removed
:heavy_check_mark: Network elk-stack_default Removed

结果

您应该已经通过 Docker Compose 运行了 ELK 技术栈。下一步是添加 Filebeat 等报表生成器,或者查阅官方文档。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢