【监控】【Nginx】使用 Docker 部署 ELK Stack 监控 Nginx

17 篇文章 0 订阅
7 篇文章 0 订阅

在现代云原生应用中,使用 Docker 容器化部署 ELK Stack(Elasticsearch、Logstash 和 Kibana)来监控 Nginx 日志,能够有效提高系统的可维护性和扩展性。本文将详细介绍如何使用 Docker 部署 ELK Stack,并配置其监控 Nginx。

1. 什么是 ELK Stack?

ELK Stack 是一个强大的日志管理和分析平台,由以下组件组成:

  • Elasticsearch:用于存储和搜索日志数据。
  • Logstash:用于处理和转发日志数据。
  • Kibana:用于可视化和分析数据。

通过将 Nginx 日志发送到 ELK Stack,用户可以实时监控网站的访问情况和性能。

2. 准备工作

在开始之前,请确保您的系统上已安装以下软件:

  • Docker:容器化平台,用于构建和运行容器。
  • Docker Compose:用于定义和管理多容器应用的工具。

可以通过以下命令安装 Docker 和 Docker Compose(以 Ubuntu 为例):

sudo apt update
sudo apt install docker.io docker-compose

安装完成后,确保 Docker 服务正在运行:

sudo systemctl start docker
sudo systemctl enable docker

3. 使用 Docker Compose 部署 ELK Stack

创建一个新的项目目录,例如 elk-nginx-monitor,并在该目录下创建 docker-compose.yml 文件:

version: '3.7'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.6.3
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=changeme  # 设置 Elasticsearch 密码
    ports:
      - "9200:9200"  # 映射端口
    volumes:
      - esdata:/usr/share/elasticsearch/data  # 持久化数据

  logstash:
    image: docker.elastic.co/logstash/logstash:8.6.3
    container_name: logstash
    ports:
      - "5044:5044"  # Logstash 输入端口
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf  # Logstash 配置文件
    depends_on:
      - elasticsearch  # 确保 Elasticsearch 先启动

  kibana:
    image: docker.elastic.co/kibana/kibana:8.6.3
    container_name: kibana
    ports:
      - "5601:5601"  # Kibana 用户界面端口
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200  # Elasticsearch 地址
      - ELASTICSEARCH_USERNAME=elastic  # Elasticsearch 用户名
      - ELASTICSEARCH_PASSWORD=changeme  # Elasticsearch 密码
    depends_on:
      - elasticsearch  # 确保 Elasticsearch 先启动

volumes:
  esdata:  # 定义数据卷

创建 Logstash 配置文件

在同一目录下创建 logstash.conf 文件,用于配置 Logstash 的输入、过滤和输出:

input {
  beats {
    port => 5044  # 定义接收 Beats 输入的端口
  }
}

filter {
  grok {
    match => { "message" => "%{IPORHOST:client_ip} - - \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:bytes}" }
  }
  date {
    match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]  # 时间格式解析
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]  # 输出到 Elasticsearch
    index => "nginx-access-%{+YYYY.MM.dd}"  # 定义索引名称
    user => "elastic"
    password => "changeme"
  }
}

4. 配置 Nginx 日志收集

接下来,确保 Nginx 将日志发送到 Logstash。可以使用 Filebeat 来收集 Nginx 日志并将其发送到 Logstash。

安装并配置 Filebeat

  1. 创建一个新的 Dockerfile,为 Filebeat 创建镜像:
FROM docker.elastic.co/beats/filebeat:8.6.3  # 使用官方 Filebeat 镜像

COPY filebeat.yml /usr/share/filebeat/filebeat.yml  # 复制配置文件
  1. 创建 filebeat.yml 配置文件,内容如下:
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log  # 定义 Nginx 日志路径

output.logstash:
  hosts: ["logstash:5044"]  # 定义 Logstash 地址
  1. 修改 docker-compose.yml 文件,添加 Filebeat 服务:
  filebeat:
    build: .  # 使用当前目录下的 Dockerfile
    volumes:
      - /var/log/nginx:/var/log/nginx:ro  # 只读挂载 Nginx 日志
    depends_on:
      - logstash  # 确保 Logstash 先启动

5. 访问 Kibana 并可视化数据

  1. 启动 ELK Stack

在项目目录下运行以下命令启动所有服务:

docker-compose up -d
  1. 访问 Kibana

打开浏览器,访问 http://localhost:5601,确认 Kibana 是否正常运行。

  1. 配置索引模式

在 Kibana 中,进入 “Management” -> “Index Patterns”,创建新的索引模式,输入 nginx-access-*,选择时间字段为 @timestamp

  1. 创建可视化

在 Kibana 中,选择 “Visualize”,可以创建各种图表,如请求量趋势、响应状态分布等。

总结

通过 Docker 部署 ELK Stack 来监控 Nginx,可以简化环境的配置和管理。使用 Filebeat 作为日志收集工具,可以轻松将 Nginx 日志发送到 Logstash,并利用 Kibana 实现数据的可视化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶2136

谢谢老板。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值