PHP 服务实现监控可观测性最佳实践

前言

本次实践主要是介绍 PHP 服务通过无侵入的方式接入观测云进行全面的可观测。

环境信息

  • 主机环境:CentOS 7.8
  • PHP:7.4.33
  • MySQL:5.7

接入方案

准备工作

安装 DataKit
# 需要把token 改成观测云空间的实际token值(可在观测云控制台-->集成-->Datakit 上面获取)
DK_DATAWAY="https://openway.guance.com?token=tkn_xxxxxx" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)" 
开启 ddtrace 采集器
cp /usr/local/datakit/conf.d/ddtrace/ddtrace.conf.sample  /usr/local/datakit/conf.d/ddtrace/ddtrace.conf
重启 Datakit
# 在主机终端输入命令
datakit service -R
查看采集器是否开启
# 在主机终端输入命令
datakit monitor

准备测试环境

安装 Nginx、PHP 和 MySQL

可以通过 yum 命令行的方式安装 Nginx、PHP、PHP-FPM、MySQL,注意版本信息。

编写代码

在 MySQL 数据库中创建 demo_db 表:

CREATE DATABASE demo_db;USE demo_db;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100)
); 

插入一条 users 记录:

INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');

前端 index.html 页面代码如下:

<!DOCTYPE html>
<html>
<head><title>NGINX, PHP-FPM, and MySQL Demo</title>
</head>
<body><h1>User List</h1><ul id="user-list"></ul><script>fetch('/index.php').then(response => response.json()).then(data => {const userList = document.getElementById('user-list');data.forEach(user => {const li = document.createElement('li');li.textContent = `${user.name} - ${user.email}`;userList.appendChild(li);});}).catch(error => console.error('Error fetching data:', error));</script>
</body>
</html>

在同级目录下创建一个新的 PHP 后端脚本来处理前端的请求,例如 index.php :

<?php
$host = 'localhost';
$username = 'your_mysql_username';
$password = 'your_mysql_password';
$database = 'demo_db';// 创建 MySQL 连接
$mysqli = new mysqli($host, $username, $password, $database);// 检查连接是否成功
if ($mysqli->connect_error) {die('数据库连接失败:' . $mysqli->connect_error);
}// 查询用户信息
$query = "SELECT * FROM users";
$result = $mysqli->query($query);// 处理查询结果
$users = array();
if ($result->num_rows > 0) {while ($row = $result->fetch_assoc()) {$users[] = $row;}
}// 关闭数据库连接
$mysqli->close();// 将结果以 JSON 格式返回给前端
header('Content-Type: application/json');
echo json_encode($users);

请注意,以上代码中的 your_mysql_username 和 your_mysql_password 应该被替换为你的 MySQL 数据库的用户名和密码。同时,demo_db 应该是你创建的 MySQL 数据库名,并且其中包含了 users 表来存储用户信息。如果你的 MySQL 配置和数据库结构正确,当你在浏览器中打开 index.html 页面时,应该能够看到从数据库中获取的用户列表显示在页面上。

PHP 配置

安装 php-mysqlnd 。

yum install php-mysqlnd
vi /etc/php.ini
#添加一行代码
extension=mysqli

下载 ddtrace-php 安装脚本。

curl -LO https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php

在下载目录上执行命令安装,这一步时间略长。

php datadog-setup.php --php-bin=all

执行如下命令查看是否安装成功。

php -m | grep ddtrace

通过 service php-fpm start 启动 PHP-FPM 。

找到对应的 php-fpm 配置文件,通常路径为 /etc/php-fpm.d/www.conf ,增加如下配置:

env[DD_AGENT_HOST] = localhost
env[DD_TRACE_AGENT_PORT] = 9529
env[DD_SERVICE] = my-app

接入验证

通过浏览器访问 nginx 所在服务器的 index.html 页面 http://xx.xx.xx.xx/index.html ,可以查看到页面信息(访问前注意开通相关防火墙规则或安全组策略)。

实践效果

根据以上实验过程可实现应用链路数据展示,以下为具体的截图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285677.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Telegram账号显示已被封禁?这篇解封申诉教程可以帮到你

一打开Telegram突然出现【该手机号码已被封禁】的信息&#xff1f; 无论是Telegram手机端和电脑PC端都自动掉线并退出了&#xff1f; 遇到这些情况不要慌&#xff01;以下教你四个向Telegram官方申诉的方法&#xff01;希望可以帮助你顺利拯救你的Telegram账号。 &#xff0…

源聚达科技:抖音开网店选品渠道有哪些

在数字浪潮中&#xff0c;抖音不仅是短视频的集散地&#xff0c;也成为了众多创业者眼中的电商圣地。想要在抖音开设一家成功的网店&#xff0c;选品环节至关重要。那么&#xff0c;如何在琳琅满目的商品中找到适合自己店铺的宝贝呢?以下几种选品渠道或许能为你指明方向。 直接…

如何在Linux系统使用宝塔面板搭建Inis博客并发布至公网【内网穿透】

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

基于 C++ STL 的图书管理系统213行

定制魏&#xff1a;QTWZPW&#xff0c;获取更多源码等 目录 一、实践项目名称 二、实践目的 三、实践要求 四、实践内容 五、代码框架参考 六、代码效果展示 七、完整代码主函数展示 一、实践项目名称 基于 C STL 的图书管理系统 二、实践目的 通过设计和实现一个基于…

Linux之缓冲区与C库IO函数简单模拟

缓冲区 首先, 我们对缓冲区最基本的理解, 是一块内存, 用户提供的缓冲区就是用户缓冲区, C标准库提供的就是C标准库提供的缓冲区, 操作系统提供的就是操作系统缓冲区, 它们都是一块内存. 为什么要有缓冲区? 先举个生活中的例子, 我们寄快递的时候往往是去驿站寄快递, 而不是…

教大家几种解决msvcr120.dll文件丢失的问题以及解决办法

当这个msvcr120.dll文件丢失或损坏时&#xff0c;依赖它的程序可能无法启动或正常运行&#xff0c;这可能影响电脑的使用效率。如果用户遇到因缺少msvcr120.dll而导致的程序错误&#xff0c;安装或修复这个msvcr120.dll文件是一种维护措施&#xff0c;可以帮助恢复软件的正常功…

中等职业学校大数据课程建设方案

大数据产业是以数据及数据所蕴含的信息价值为核心生产要素&#xff0c;通过数据技术、数据产品、数据服务等形式&#xff0c;使数据与信息价值在各行业经济活动中得到充分释放的赋能型产业。 大数据产业定义一般分为核心业态、关联业态、衍生业态三大业态。 一、专…

Spring Security之认证过滤器

前言 上回我们探讨了关于Spring Security&#xff0c;着实复杂。这次咱们聊的认证过滤器就先聊聊认证功能。涉及到多方协同的功能&#xff0c;咱分开聊。也给小伙伴喘口气&#xff0c;嘻嘻。此外也是因为只有登录认证了&#xff0c;才有后续的更多功能集成的可能。 认证过滤器…

巧用 20个 Linux 命令贴士与技巧,让你生产力瞬间翻倍?

在本文中&#xff0c;我将向您演示一些专业的Linux命令技巧&#xff0c;这些技巧将使您节省大量时间&#xff0c;在某些情况下还可以避免很多麻烦&#xff0c;而且它也将帮助您提高工作效率。 并不是说这些只是针对初学者的 Linux 技巧。即使有经验的Linux用户也有可能没有发现…

简单了解单例模式

什么是单例模式 对于一个类&#xff0c;只有一个实例化的对象&#xff0c;我们构建单例模式一般有两种&#xff1a;饿汉式和懒汉式 饿汉式 优点是无线程安全问题&#xff0c;类加载就创建对象缺点是占内存 class Singleton01{private static Singleton01 instance new Sing…

shell实现查询进程号并批量kill(脚本)

问题或需求描述 在shell中&#xff0c;如果你想通过命令行查询出一系列匹配某个关键词的进程&#xff0c;并使用xargs命令批量结束这些进程&#xff0c;可以按照以下步骤操作&#xff1a; # 查询并提取进程号 pgrep -f "关键词" | xargs kill# 或者&#xff0c;如果…

图书馆RFID(射频识别)数据模型压缩/解压缩算法实现小工具

点击下载《C# 实现图书馆射频识别数据模型压缩算法&#xff08;源代码pdf参考资料&#xff09;》 1. 前言 最近闲来无聊&#xff0c;看了一下《图书馆射频识别数据模型第1部分&#xff1a;数据元素的设置及应用规则》以及《图书馆射频识别数据模型第2部分&#xff1a;基于ISO…

如何联合Qt,VS,C++,来开发一个电脑版软件(简单有趣,详细)

本教程适合 新手VS+QT小白。目前更新到了可以写一个计算器【拉到文章末尾,可以看到界面】。 前置安装 VS2019 或2022 社区版(这个太简单,就不在这里写了!)建议参考之前写的文章: https://zhuanlan.zhihu.com/p/682531067 注册登陆Qt账户 Try Qt 下载Qt 登陆之后,…

iOS开发 - 转源码 - __weak问题解决

iOS开发 - 转源码 - __weak问题解决 在使用clang转换OC为C代码时&#xff0c;可能会遇到以下问题 cannot create __weak reference in file using manual reference 原因 __weak弱引用是需要runtime支持的&#xff0c;如果我们还只是使用静态编译&#xff0c;是无法正常转换的…

Jenkins的快速入门

文章目录 一、Jenkins是什么&#xff1f;二、Jenkins安装和持续集成环境配置1.持续集成流程说明2.Gitlab代码托管服务器安装Gitlab简介&#xff1a;Gitlab安装Gitlab的使用切换中文添加组创建用户将用户添加到组创建项目idea中代码上传Gitlab 3.Jenkins持续集成环境服务器安装J…

在MongoDB建模1对N关系的基本方法

“我在 SQL 和规范化数据库方面拥有丰富的经验&#xff0c;但我只是 MongoDB 的初学者。如何建立一对 N 关系模型&#xff1f;” 这是我从参加 MongoDB 分享日活动的用户那里得到的最常见问题之一。 我对这个问题没有简短的答案&#xff0c;因为方法不只有一种&#xff0c;还有…

【Python实战】——神经网络识别手写数字

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

【C++从练气到飞升】05---运算符重载

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 ⛳️推荐 一、运算符重载的引用 二、运算符重载 三、赋值运算符重载 1 .赋值运算符重载格式: 2 .赋值运算符只能重载成…

SAP 标准委外业务对已收货后对组件的后续调整简介

标准委外业务对已收货后对组件的后续调整 通常在委外的业务中经常会存在发给供应商的物料发现有少发&#xff0c;或者需要补发的情况&#xff0c;委外的业务都是基于采购订单收货的时候才对供应商库存进行扣减。委外成品在收货后产生543的移动类型原材料进行冲消。 但是我们在物…

【C语言】编译和链接----预处理详解【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作揭秘&#xff1a;C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 欢迎来到本篇博客&…