Pular para o conteúdo principal
O pacote AppSignal for PHP fornece instrumentações prontas para uso para sua aplicação PHP. No entanto, às vezes você precisa de uma observabilidade mais granular, o que exige instrumentação manual. Para esses casos, use o método Appsignal::instrument e personalize os dados enviados ao AppSignal usando os métodos auxiliares.
Os dados enviados ao AppSignal não devem conter nenhum dado pessoal, como nomes ou endereços de e-mail. Sanitize os dados da sua aplicação antes de enviá-los ao AppSignal. Se você precisar identificar uma pessoa, use alternativas como um ID de usuário, um hash ou um pseudônimo.

Criando spans

A classe Appsignal fornece um helper para criar spans.

instrument

Cria e ativa um novo span. Passe uma closure para que o span seja fechado automaticamente, ou omita-a para gerenciar o ciclo de vida do span manualmente.

Com uma closure

Se você usar uma closure, o AppSignal fecha o span ativo automaticamente.
PHP
Appsignal::instrument(
	name: 'process-order',
	attributes: ['order_id' => $orderId],
	closure: function () {
		// do work here
		Appsignal::setAttributes(['order_status' => 'processed']);
	},
);

Sem uma closure

Sem uma closure, o método instrument retorna uma instância da classe ActiveSpan, um wrapper leve em volta do span do OpenTelemetry e do seu escopo. Feche esse span manualmente chamando $span->end().
PHP
$activeSpan = Appsignal::instrument(
	name: 'upload-file',
	attributes: ['file_name' => $filename],
);

try {
    uploadFile($file);
} catch (Throwable $e) {
    Appsignal::setError($e);
} finally {
    $activeSpan->end();
}

Helpers

A classe base Appsignal fornece métodos auxiliares para adicionar dados customizados a traces ou spans. As seções a seguir descrevem cada helper.
Os exemplos de código abaixo presumem que seu código já está sendo instrumentado (por exemplo, dentro de um handler de rota do Laravel ou Symfony). Se seu código ainda não estiver instrumentado, você precisa criar um span raiz chamando Appsignal::instrument() e usar os helpers dentro dele.

addAttributes

Adiciona atributos ao span atual.
PHP
Appsignal::addAttributes([
    'user_id'   => $user->id,
    'user_plan' => $user->plan,
]);

addHeaders

Adiciona cabeçalhos de requisição ao span atual. Se o nome do cabeçalho já existir, o valor é sobrescrito. Os cabeçalhos de requisição são exibidos para traces amostrados no AppSignal. Veja o guia de personalização de cabeçalhos de requisição para mais informações.
PHP
Appsignal::addHeaders(['custom-header' => 'some-value']);

addTags

Adiciona tags ao span atual. As tags aparecem como metadados filtráveis no AppSignal e são prefixadas internamente com appsignal.tag..
PHP
Appsignal::addTags([
    'locale'  => 'en',
    'version' => '2.1.0',
]);
Veja o guia de tagging para mais informações sobre como as tags funcionam no AppSignal.

setAction

Define o nome da action no span atual. O AppSignal exibe isso como o nome da transação e o usa para agrupar amostras.
PHP
Appsignal::setAction('OrdersController::create');

setNamespace

Define o namespace do span raiz.
PHP
Appsignal::setNamespace('admin');

setParams

Define os parâmetros de query da requisição recebida. O $params precisa ser um valor que pode ser serializado como JSON.
PHP
$params = [
    'param1' => 'value1',
    'param2' => 'value2',
    'nested' => [
        'param3' => 'value3',
        'param4' => 'value4',
    ],
];

Appsignal::setParams($params);

setPayload

Define o payload da requisição recebida. O $payload precisa ser um valor que pode ser serializado como JSON.
PHP
$payload = [
    'key1' => 'value1',
    'key2' => 'value2',
    'nested' => [
        'key3' => 'value3',
        'key4' => 'value4',
    ],
];

Appsignal::setPayload($payload);

ActiveSpan

Appsignal::instrument() retorna uma instância de ActiveSpan que faz proxy de todos os métodos padrão da SpanInterface da API do OpenTelemetry. Se você precisar de controle de baixo nível sobre o span, use esses métodos para anexar dados ou eventos diretamente a ele.
PHP
$activeSpan = Appsignal::instrument('render-report');
$activeSpan->setAttribute('report.type', 'pdf');
$activeSpan->addEvent('rendering-started');

someExpensiveMethod();

$activeSpan->end();