当前位置: 首页 > news >正文

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

目录

  • 1. 什么是 ELK Stack?
  • 2. 准备工作
  • 3. 使用 Docker Compose 部署 ELK Stack
    • 创建 Logstash 配置文件
  • 4. 配置 Nginx 日志收集
    • 安装并配置 Filebeat
  • 5. 访问 Kibana 并可视化数据
  • 总结

在现代云原生应用中,使用 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.3container_name: elasticsearchenvironment:- 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.3container_name: logstashports:- "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.3container_name: kibanaports:- "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"]  # 输出到 Elasticsearchindex => "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: logenabled: truepaths:- /var/log/nginx/access.log  # 定义 Nginx 日志路径output.logstash:hosts: ["logstash:5044"]  # 定义 Logstash 地址
  1. 修改 docker-compose.yml 文件,添加 Filebeat 服务:
  filebeat:build: .  # 使用当前目录下的 Dockerfilevolumes:- /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 实现数据的可视化。


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vite + Vue + TypeScript 项目搭建总结
  • 【ComfyUI】自定义节点ComfyUI_LayerStyle——模仿 Adob​​e Photoshop 的图层样式、图层混合、图文混合、添加不可见水印
  • 安卓13去掉下拉菜单的Dump SysUI 堆的选项 android13删除Dump SysUI 堆
  • C语言中数组和字符串的联系
  • OpenAI 刚刚推出 o1 大模型!!突破LLM极限
  • Ruby-SAML CVE-2024-45409 漏洞解决方案
  • 7.搭建个人金融数据库之快速获取股票列表和基本信息!
  • OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)
  • 深度学习02-pytorch-04-张量的运算函数
  • 【计算机网络】运输层协议解析
  • 分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)
  • 全栈项目小组【算法赛】题目及解题
  • 《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统
  • Pandas简介
  • HTML5中新增元素介绍
  • Cookie 在前端中的实践
  • ES6系统学习----从Apollo Client看解构赋值
  • ESLint简单操作
  • Java 多线程编程之:notify 和 wait 用法
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • js 实现textarea输入字数提示
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Next.js之基础概念(二)
  • Node项目之评分系统(二)- 数据库设计
  • Redash本地开发环境搭建
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SSH 免密登录
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vultr 教程目录
  • 汉诺塔算法
  • 学习ES6 变量的解构赋值
  • 正则学习笔记
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # dbt source dbt source freshness命令详解
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (4)(4.6) Triducer
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (二十四)Flask之flask-session组件
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (算法)区间调度问题
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (杂交版)植物大战僵尸
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • @Autowired和@Resource的区别
  • [000-002-01].数据库调优相关学习
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
  • [C++][opencv]基于opencv实现photoshop算法图像剪切