tms-software / application-insights
此项目扩展了Application Insights API界面以支持PHP。
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: >=5.0 <=6.3.3
Requires (Dev)
- evert/phpdoc-md: ~0.0.7
- phpunit/phpunit: ~4.8.36
README
此项目扩展了Application Insights API界面以支持PHP。Application Insights是一种服务,允许开发者在Azure门户中可视化各种类型的遥测数据(事件、跟踪、异常等),以保持其应用程序可用、性能良好并成功。此PHP模块允许您将遥测数据发送到Application Insights服务。
状态
尽管我们过去对此项目做出了贡献,但此SDK并非由Microsoft维护或支持。请注意,Azure Monitor仅在您使用受支持的SDK时提供支持。我们正在不断评估扩大对其他语言支持的机会,请关注我们的GitHub公告页面以获取最新的SDK新闻。
要求
支持PHP版本 >=5.4.2。
为了在Microsoft Visual Studio中打开项目,您需要PHP Tools for Visual Studio。但这不是必需的。
安装
我们在Packagist上发布了一个包,您可以在Packagist上找到它。为了使用它,首先,您需要获取Composer。
一旦您已设置项目使用Composer,只需将包的引用添加到您要使用的版本中,并将其添加到composer.json文件中。
require: "microsoft/application-insights": "*"
或者,您可以使用composer命令自动将包添加到composer.json文件中。
composer require microsoft/application-insights
请确保添加require语句以导入库
require_once 'vendor/autoload.php';
用法
安装后,您可以向Application Insights发送遥测数据。以下是一些示例。
注意:在发送数据之前,您需要获取一个 instrumentation key。请参阅获取Application Insights instrumentation key部分以获取更多信息。
初始化客户端并设置 instrumentation key 和其他可选配置
$telemetryClient = new \ApplicationInsights\Telemetry_Client(); $context = $telemetryClient->getContext(); // Necessary $context->setInstrumentationKey('YOUR INSTRUMENTATION KEY'); // Optional $context->getSessionContext()->setId(session_id()); $context->getUserContext()->setId('YOUR USER ID'); $context->getApplicationContext()->setVer('YOUR VERSION'); $context->getLocationContext()->setIp('YOUR IP'); // Start tracking $telemetryClient->trackEvent('name of your event'); $telemetryClient->flush();
设置操作上下文
为了正确地报告Application Insights,您需要设置操作上下文,参考请求
$telemetryClient->getContext()->getOperationContext()->setId('XX'); $telemetryClient->getContext()->getOperationContext()->setName('GET Index');
发送一个简单的带事件名称的事件遥测项目
$telemetryClient->trackEvent('name of your event'); $telemetryClient->flush();
发送一个带自定义属性和测量的事件遥测项目
$telemetryClient->trackEvent('name of your event', ['MyCustomProperty' => 42, 'MyCustomProperty2' => 'test'], ['duration', 42]); $telemetryClient->flush();
在发送到服务之前,发送多个遥测项目也是支持的;API将批处理所有内容,直到您调用flush()
$telemetryClient->trackEvent('name of your event'); $telemetryClient->trackEvent('name of your second event'); $telemetryClient->flush();
发送一个简单的页面视图遥测项目,包含页面名称和URL
$telemetryClient->trackPageView('myPageView', 'http://www.foo.com'); $telemetryClient->flush();
发送一个带持续时间、自定义属性和测量的页面视图遥测项目
$telemetryClient->trackPageView('myPageView', 'http://www.foo.com', 256, ['InlineProperty' => 'test_value'], ['duration' => 42.0]); $telemetryClient->flush();
发送一个简单的带指标名称和值的指标遥测项目
$telemetryClient->trackMetric('myMetric', 42.0); $telemetryClient->flush();
发送一个带点类型、计数、最小值、最大值、标准差和测量的指标遥测项目
$telemetryClient->trackMetric('myMetric', 42.0, \ApplicationInsights\Channel\Contracts\Data_Point_Type::Aggregation, 5, 0, 1, 0.2, ['InlineProperty' => 'test_value']); $telemetryClient->flush();
发送一个简单的带消息的消息遥测项目
$telemetryClient->trackMessage('myMessage', \ApplicationInsights\Channel\Contracts\Message_Severity_Level::INFORMATION, ['InlineProperty' => 'test_value']); $telemetryClient->flush();
发送一个简单的带请求名称、URL和开始时间的请求遥测项目
$telemetryClient->trackRequest('myRequest', 'http://foo.bar', time()); $telemetryClient->flush();
发送一个带持续时间、HTTP状态代码、请求是否成功、自定义属性和测量的请求遥测项目
$telemetryClient->trackRequest('myRequest', 'http://foo.bar', time(), 3754, 200, true, ['InlineProperty' => 'test_value'], ['duration_inner' => 42.0]); $telemetryClient->flush();
发送带自定义属性和指标的异常遥测
try { // Do something to throw an exception } catch (\Exception $ex) { $telemetryClient->trackException($ex, ['InlineProperty' => 'test_value'], ['duration_inner' => 42.0]); $telemetryClient->flush(); }
在发送之前将客户端设置为对数据进行gzip压缩
$telemetryClient->getChannel()->setSendGzipped(true);
注册异常处理器
class Handle_Exceptions { private $_telemetryClient; public function __construct() { $this->_telemetryClient = new \ApplicationInsights\Telemetry_Client(); $this->_telemetryClient->getContext()->setInstrumentationKey('YOUR INSTRUMENTATION KEY'); set_exception_handler(array($this, 'exceptionHandler')); } function exceptionHandler(\Exception $exception) { if ($exception != NULL) { $this->_telemetryClient->trackException($exception); $this->_telemetryClient->flush(); } } }
发送成功的 SQL 依赖性遥测项目
$telemetryClient->trackDependency('Query table', "SQL", 'SELECT * FROM table;', time(), 122, true); $telemetryClient->flush();
发送失败的 HTTP 依赖性遥测项目
$telemetryClient->trackDependency('method', "HTTP", "http://example.com/api/method", time(), 324, false, 503); $telemetryClient->flush();
发送任何其他类型的依赖性遥测项目
$telemetryClient->trackDependency('Name of operation', "service", 'Arguments', time(), 23, true); $telemetryClient->flush();
更改操作 ID(用于链接操作)
$telemetryClient->trackMetric('interestingMetric', 10); $telemetryClient->getContext()->getOperationContext()->setId(\ApplicationInsights\Channel\Contracts\Utils::returnGuid()) $telemetryClient->trackMetric('differentOperationMetric', 11); $telemetryClient->flush();
行为准则
本项目采用了微软开源行为准则。有关更多信息,请参阅行为准则常见问题解答,或通过opencode@microsoft.com联系,以提出任何额外的问题或评论。