PHP 项目搭建 ELK 日志监控体系完整指南
ELK (Elasticsearch + Logstash + Kibana) 是当前最流行的日志管理解决方案之一。下面详细介绍如何为 PHP 项目搭建完整的 ELK 日志监控体系。
一、基础架构组成
PHP应用 → Filebeat → Logstash → Elasticsearch → Kibana(可选) ↗
二、环境准备
1. 服务器要求
-
建议独立服务器部署
-
最低配置:4核CPU/8GB内存/100GB存储
-
推荐配置:8核CPU/16GB内存/500GB SSD(生产环境)
2. 组件版本选择
# 推荐使用相同大版本
Elasticsearch 8.x
Logstash 8.x
Kibana 8.x
Filebeat 8.x
三、详细安装配置步骤
1. Elasticsearch 安装配置
# 安装(Ubuntu示例)
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update && sudo apt install elasticsearch# 基础配置 /etc/elasticsearch/elasticsearch.yml
cluster.name: php-logs
node.name: node-1
network.host: 0.0.0.0
discovery.type: single-node # 单节点模式
xpack.security.enabled: true # 启用安全认证# 启动服务
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch# 设置密码
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
2. Logstash 配置
sudo apt install logstash
创建配置文件 /etc/logstash/conf.d/php.conf:
input {beats {port => 5044}
}filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" }}date {match => ["timestamp", "ISO8601"]target => "@timestamp"}mutate {remove_field => ["timestamp"]}
}output {elasticsearch {hosts => ["http://localhost:9200"]index => "php-logs-%{+YYYY.MM.dd}"user => "elastic"password => "your_password"}
}
启动服务:
sudo systemctl start logstash
sudo systemctl enable logstash
3. Kibana 安装配置
sudo apt install kibana
配置 /etc/kibana/kibana.yml:
server.host: "0.0.0.0"
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "your_password"
启动服务:
sudo systemctl start kibana
sudo systemctl enable kibana
4. Filebeat 客户端配置(PHP服务器)
sudo apt install filebeat
配置 /etc/filebeat/filebeat.yml:
filebeat.inputs:
- type: logenabled: truepaths:- /var/www/html/storage/logs/*.log # PHP日志路径fields:app: php-appenv: productionoutput.logstash:hosts: ["logstash-server:5044"]
启动服务:
sudo systemctl start filebeat
sudo systemctl enable filebeat
四、PHP 应用日志集成
1. Monolog 配置示例
// composer.json
{"require": {"monolog/monolog": "^2.0"}
}
// 日志配置示例
use Monolog\Logger;
use Monolog\Handler\StreamHandler;$log = new Logger('app');
$log->pushHandler(new StreamHandler(__DIR__.'/storage/logs/app.log', Logger::DEBUG));// 结构化日志示例
$log->info('User login', ['user_id' => 123,'ip' => $_SERVER['REMOTE_ADDR'],'user_agent' => $_SERVER['HTTP_USER_AGENT']
]);
2. 日志格式优化
推荐使用JSON格式日志:
$jsonHandler = new StreamHandler(__DIR__.'/logs/app.json',Logger::DEBUG
);
$jsonHandler->setFormatter(new JsonFormatter());
$log->pushHandler($jsonHandler);
五、Kibana 仪表板配置
-
访问
http://your-server:5601 -
创建索引模式
php-logs-* -
创建可视化图表:
-
错误日志统计
-
请求响应时间分布
-
用户行为热力图
-
-
设置警报规则(如5分钟内错误超过100次触发报警)
六、高级功能配置
1. 日志归档策略
# Logstash添加以下output
output {# 每天归档日志到S3s3 {access_key_id => "your_key"secret_access_key => "your_secret"region => "us-east-1"bucket => "php-logs-archive"time_file => 24codec => "json"}
}
2. 性能优化建议
# Elasticsearch优化 /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g# Logstash管道优化
pipeline.workers: 4
pipeline.batch.size: 100
3. 安全加固
# 设置防火墙规则
sudo ufw allow 9200/tcp # Elasticsearch
sudo ufw allow 5601/tcp # Kibana
sudo ufw allow 5044/tcp # Logstash
七、常见问题解决
-
日志收集延迟:
# 检查Filebeat状态 sudo filebeat test output# 增加Logstash管道线程 pipeline.workers: 8 -
磁盘空间不足:
# 设置Elasticsearch索引生命周期管理 PUT _ilm/policy/php-logs-policy {"policy": {"phases": {"hot": {"actions": {"rollover": {"max_size": "50GB"}}},"delete": {"min_age": "30d","actions": {"delete": {}}}}} } -
日志解析失败:
# 更新Logstash的grok模式 filter {grok {match => { "message" => ["%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}", "备用模式"] }} }八、监控指标建议
-
关键指标:
-
错误率(5xx响应占比)
-
慢请求(>1s的请求)
-
用户行为异常(如频繁登录失败)
-
-
报警规则示例:
{"alert_name": "High Error Rate","conditions": {"threshold": 5,"time_window": "5m","metric": "error_count"} }通过以上完整配置,您可以为PHP应用构建一个高效、可靠的日志监控系统,实现从日志收集、存储到可视化分析的全流程管理。
相关文章:
PHP 项目搭建 ELK 日志监控体系完整指南
ELK (Elasticsearch Logstash Kibana) 是当前最流行的日志管理解决方案之一。下面详细介绍如何为 PHP 项目搭建完整的 ELK 日志监控体系。 一、基础架构组成 PHP应用 → Filebeat → Logstash → Elasticsearch → Kibana(可选) ↗ 二、环境准备 1. 服务器要求 建议独立服…...
唯美社区源码AM社区同款源码
源码介绍 唯美社区源码AM社区同款源码 后端修改application.properties文件内容为你的数据库 前端修改/config/config.js文件内容为你的后端地址 这两个文件里要修改的地方我已经用中文标注出来了 截图 源码免费下载 唯美社区源码AM社区同款源码...
《野史未必假》王磊
文章目录 前言一、禅让制的真相:让了,又没有完全让禅让制的真相尧舜禹之间的“禅让”实际上是一场权力斗争 二、美女间谍的下落:西施和范蠡终成眷属了吗范蠡的逃亡“美人计”的真相 三、“背叛”的名将:魏延真的有“反骨”吗?“子…...
Redis 热key问题怎么解决?
Redis 热 Key 问题分析与解决方案 热 Key(Hot Key)是指被高频访问的某个或多个 Key,导致单个 Redis 节点负载过高,可能引发性能瓶颈甚至服务崩溃。以下是常见原因及解决方案: 1. 热 Key 的常见原因 突发流量:如明星八卦、秒杀商品、热门直播等场景。缓存设计不合理:如全…...
定制一款国密浏览器(3):修改浏览器应用程序安装路径
在上一章中介绍了如何修改 deb 包的包名,这一章讲一下如何修改浏览器应用程序安装路径。 chromium deb 包将程序文件安装在 /usr/share/chromium 下,但在很多系统中(比如统信 UOS 和 麒麟系统),规范要求应用程序安装在 /opt/apps 下。此外,对一些不可变系统(比如 deepi…...
3. go-zero中如何使用redis
问题 go-zero项目相关文档中redis是这样配置的: Name: account.rpc ListenOn: 0.0.0.0:8080 Etcd:Hosts:- 127.0.0.1:2379Key: account.rpcMysql:Host: xxxx:3306User: rootPass: xxxData: mall-userCharset: utf8mb4Cache: - Host: 192.168.145.10:6379Type: nod…...
cpp自学 day19(多态)
一、基本概念 同一操作作用于不同的对象,产生不同的执行结果 👉 就像「按F1键」:在Word弹出帮助文档,在PS弹出画笔设置,同一个按键触发不同功能 (1)多态类型 类型实现方式绑定时机静态多态…...
【算法/c++】利用中序遍历和后序遍历建二叉树
目录 题目:树的遍历前言题目来源树的数组存储基本思想存储规则示例 建树算法关键思路代码总代码 链表法 题目:树的遍历 前言 如果不是完全二叉树,使用数组模拟树,会很浪费空间。 题目来源 本题来自 PTA 天梯赛。 题目链接: 树…...
基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(一)
1. 背景 arXiv简介(参考DeepSeek大模型生成内容): arXiv(发音同“archive”,/ˈɑːrkaɪv/)是一个开放的学术预印本平台,主要用于研究人员分享和获取尚未正式发表或已完成投稿的学术论文。创…...
cpp经典数论问题
题目如下 思路 代码如下...
C++中如何比较两个字符串的大小--compare()函数实现
一、现在有一个问题描述:有两个字符串,要按照字典顺序比较它们的大小(注意所有的小写字母都大于所有的大写字母 )。 二、代码 #include <bits/stdc.h> using namespace std;int main() {string str1 "apple";…...
微软2025年AI技术深度解析:从多模态大模型到企业级代理服务
微软2025年AI技术深度解析:从多模态大模型到企业级代理服务 一、微软AI技术全景概览 在2025年的AI领域,微软通过Azure AI Foundry、多模态大模型、企业级AI代理三大核心技术,构建了覆盖开发、部署、应用全流程的AI生态体系。根据最新财报数…...
C++中的匿名函数
代码解析 auto getTicks [](QCPAxis *axis) -> QList<double> {QList<double> ticks;if(auto ticker static_cast<QCPAxisTickerFixed *>(axis->ticker().data())){double current axis->range().lower;const double step ticker->…...
浏览器 路由详解
Hash路由 URL 结构:http://example.com/#/path,# 后的部分称为哈希(Hash)。无刷新特性:浏览器不会将哈希部分发送到服务器,改变哈希值不会触发页面刷新。事件驱动:URL…...
Scala面向对象2
1. 抽象属性和方法:用 abstract 关键字定义抽象类,其中抽象属性无初始值,抽象方法无实现 。重写抽象方法需用 override ,重写抽象属性时,可变属性用 var ,不可变属性用 val 。 匿名子类:和 Jav…...
【FPGA基础学习】状态机思想实现流水灯
目录 一、用状态机实现LED流水灯1.状态机思想简介1. 1基本概念1.2.核心要素1.3分类与模型 2.LED流水灯 二、CPLD与FPGA1.技术区别2.应用场景3.设计选择建议 三、HDLbits组合逻辑题目 一、用状态机实现LED流水灯 1.状态机思想简介 1. 1基本概念 状态机(Finite …...
HTML表单属性2
HTML5针对<input>添加了许多属性: autofocus属性 页面加载时自动聚焦到输入字段 <form action"action_page.php" >名字: <input type"text" name"fnam" autofocus><br>姓氏:<in…...
图片尺寸修改软件下载
【图片尺寸调整工具v1.0:高效便捷的图像处理助手】 图片尺寸调整工具v1.0是一款专为简化图像处理流程设计的轻量级软件,兼顾高效批量处理与个性化单图调整需求。该工具以"零学习成本"为核心设计理念,通过简洁直观的交互界面&#…...
202521 | 远程调用 | 注册中心
远程调用 1. 核心方案全景图 #mermaid-svg-f3oyP1p2P8a2lAuW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-f3oyP1p2P8a2lAuW .error-icon{fill:#552222;}#mermaid-svg-f3oyP1p2P8a2lAuW .error-text{fill:#55222…...
MySQL-SQL-DDL语句、表结构创建语句语法、表约束、表数据类型,表结构-查询SQL、修改SQL、删除SQL
一.SQL SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准 二. DDL-数据库 1. 查询所有数据库 命令:show databases; 2. 查询当前数据库 命令:select database(); 3. 创建数据库 命令:create da…...
网络钓鱼攻击的威胁和执法部门的作用(第一部分)
在当今的数字世界中,网络犯罪分子不断开发新技术来利用个人、企业和政府机构。 最普遍和最具破坏性的网络犯罪形式之一是网络钓鱼——一种社会工程手段,用于欺骗人们提供敏感信息,例如登录凭据、财务数据和个人详细信息。 随着网络钓鱼攻击…...
鸿蒙版(ArkTs) 贪吃蛇,包含无敌模式 最高分 暂停和继续功能
鸿蒙版(ArkTs) 贪吃蛇,包含无敌模式 最高分 暂停和继续功能; 效果图如下: 代码如下: // 所有import语句必须放在文件开头 import router from ohos.router; import promptAction from ohos.promptAction; // Add this import at the top wit…...
设计模式简述(十三)适配器模式
适配器模式 描述基本使用使用关于适配器关联不兼容类的方式如果原有抽象层是抽象类若原有抽象是接口使用 描述 适配器模式常用于系统已经上限稳定运行,但现有需求需要将两个不匹配的类放到一起工作时使用。 也就是说这是一个迭代阶段使用的模式。 这种模式&#x…...
4月6日随笔
一觉起来十点多 其实六点和九点分别醒过一次。 起来之后点了个侍卫草推荐的猪排饭,真的巨好吃,猪排很脆,溏心蛋也很香 但是因为酒店十二点半要退房,就匆匆吃完了猪排和一半米饭就走了 今天下午在科技楼写了一会作业,…...
Spring Boot 3.4.3 和 Spring Security 6.4.2 实现基于内存和 MySQL 的用户认证
在 Web 应用开发中,用户认证是保障系统安全的基础需求。Spring Boot 3.4.3 结合 Spring Security 6.4.2 提供了强大的安全框架支持,可以轻松实现基于内存或数据库的用户认证功能。本文将详细介绍如何在 Spring Boot 3.4.3 中集成 Spring Security 6.4.2&…...
多款CANFD芯片单粒子效应对比分析
一、引言 随着航天、工业自动化等领域的快速发展,通信芯片在各种复杂环境下的可靠性变得至关重要。单粒子效应(Single Event Effect,SEE)是空间辐射环境中影响半导体器件性能的重要因素之一。CANFD(Controller Area Network with…...
解决Win11耳机没有声音的问题
方法一:更新驱动程序(有效) 进入 “设置”(快捷键:WinX),点击 “Windows 更新” → “高级选项” 点击 “可选更新” ,然后点击 “驱动程序更新” 【注】:更新后可能会出…...
【spring02】Spring 管理 Bean-IOC,基于 XML 配置 bean
文章目录 🌍一. bean 创建顺序🌍二. bean 对象的单例和多例❄️1. 机制❄️2. 使用细节 🌍三. bean 的生命周期🌍四. 配置 bean 的后置处理器 【这个比较难】🌍五. 通过属性文件给 bean 注入值🌍六. 基于 X…...
内网渗透(杂项集合) --- 中的多协议与漏洞利用技术(杂项知识点 重点) 持续更新
目录 1. NetBIOS 名称的网络协议在局域网中内网渗透中起到什么作用 2. 使用 UDP 端口耗尽技术强制所有 DNS 查找失败,这个技术如何应用在局域网内网渗透测试中 3. 在本地创建一个 HTTP 服务来伪造 WPAD 服务器 什么是 WPAD 服务器?这个服务器是干嘛的…...
el-tabs添加按钮增加点击禁止样式
前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮,没有点击样式,用户感知不明显没有限制最大的tab添加数量,可以无限添加 调整目标&代码编写 调整目标…...
