PHP code example of jellytony / observability
1. Go to this page and download the library: Download jellytony/observability library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once ('vendor/autoload.php' );
jellytony / observability example snippets
JellyTony\Observability\ObservabilityServiceProvider::class,
JellyTony\Observability\LogServiceProvider::class,
$app->register(JellyTony\Observability\ObservabilityServiceProvider::class);
$app->register(JellyTony\Observability\LogServiceProvider::class);
return [
'service_name' => env('APP_NAME' , 'microservice' ),
'log_path' => env('LOG_PATH' , storage_path("logs/lumen.log" )),
'driver' => env('TRACING_DRIVER' , 'zipkin' ),
'zipkin' => [
'endpoint' => env('zipkin.HttpReporterUrl' , 'http://127.0.0.1:9411/api/v2/spans' ),
'options' => [
'128bit' => env('zipkin.128bit' , false ),
'max_tag_len' => env('zipkin.max_tag_len' , 1048576 ),
'request_timeout' => env("zipkin.HttpReporterTimeout" , 5 ),
],
'sampler_class' => \Zipkin\Samplers\BinarySampler::class,
'percentage_sampler_rate' => env('zipkin.Rate' , 1 ),
],
'middleware' => [
'server' => [
'logging' => [
'disabled' => env('MIDDLEWARE_SERVER_LOGGING_DISABLED' , false ),
'time_format' => env('MIDDLEWARE_SERVER_LOGGING_TIME_FORMAT' , 'Y-m-d H:i:s' ),
'latency_threshold' => env('MIDDLEWARE_SERVER_REQUEST_LATENCY_THRESHOLD' , 3000 ),
'access_level' => env('MIDDLEWARE_SERVER_LOGGING_ACCESS_LEVEL' , 'info' ),
'excluded_paths' => env('MIDDLEWARE_SERVER_LOGGING_EXCLUDED_PATHS' , []),
'request_body' => env('MIDDLEWARE_SERVER_LOGGING_REQUEST_BODY' , false ),
'request_body_max_size' => env('MIDDLEWARE_SERVER_LOGGING_REQUEST_BODY_MAX_SIZE' , 102400 ),
'request_headers' => env('MIDDLEWARE_SERVER_LOGGING_REQUEST_HEADERS' , false ),
'response_body' => env('MIDDLEWARE_SERVER_LOGGING_RESPONSE_BODY' , false ),
'response_body_max_size' => env('MIDDLEWARE_SERVER_LOGGING_RESPONSE_BODY_MAX_SIZE' , 102400 ),
'response_headers' => env('MIDDLEWARE_SERVER_LOGGING_RESPONSE_HEADERS' , false ),
'allowed_headers' => env('MIDDLEWARE_SERVER_LOGGING_ALLOWED_HEADERS' , ['Content-Type' , 'Authorization' ]),
'sensitive_headers' => env('MIDDLEWARE_SERVER_LOGGING_SENSITIVE_HEADERS' , ['Authorization' , 'Cookie' ]),
'sensitive_input' => env('MIDDLEWARE_SERVER_LOGGING_SENSITIVE_INPUT' , ['password' ]),
],
'trace' => [
'disabled' => env('MIDDLEWARE_SERVER_TRACE_DISABLED' , false ),
'latency_threshold' => env('MIDDLEWARE_SERVER_TRACE_LATENCY_THRESHOLD' , 3000 ),
'excluded_paths' => env('MIDDLEWARE_SERVER_TRACE_EXCLUDED_PATHS' , []),
'request_body' => env('MIDDLEWARE_SERVER_TRACE_REQUEST_BODY' , false ),
'request_body_max_size' => env('MIDDLEWARE_SERVER_TRACE_REQUEST_BODY_MAX_SIZE' , 102400 ),
'request_headers' => env('MIDDLEWARE_SERVER_TRACE_REQUEST_HEADERS' , false ),
'response_body' => env('MIDDLEWARE_SERVER_TRACE_RESPONSE_BODY' , false ),
'response_body_max_size' => env('MIDDLEWARE_SERVER_TRACE_RESPONSE_BODY_MAX_SIZE' , 102400 ),
'response_headers' => env('MIDDLEWARE_SERVER_TRACE_RESPONSE_HEADERS' , false ),
'allowed_headers' => env('MIDDLEWARE_SERVER_TRACE_ALLOWED_HEADERS' , ['Content-Type' , 'Authorization' ]),
'sensitive_headers' => env('MIDDLEWARE_SERVER_TRACE_SENSITIVE_HEADERS' , ['Authorization' , 'Cookie' ]),
'sensitive_input' => env('MIDDLEWARE_SERVER_TRACE_SENSITIVE_INPUT' , ['password' ]),
],
],
'client' => [
'logging' => [
'disabled' => env('MIDDLEWARE_CLIENT_LOGGING_DISABLED' , false ),
'time_format' => env('MIDDLEWARE_CLIENT_LOGGING_TIME_FORMAT' , 'Y-m-d H:i:s' ),
'latency_threshold' => env('MIDDLEWARE_CLIENT_REQUEST_LATENCY_THRESHOLD' , 3000 ),
'access_level' => env('MIDDLEWARE_CLIENT_LOGGING_ACCESS_LEVEL' , 'info' ),
'excluded_paths' => env('MIDDLEWARE_CLIENT_LOGGING_EXCLUDED_PATHS' , []),
'request_body' => env('MIDDLEWARE_CLIENT_LOGGING_REQUEST_BODY' , false ),
'request_body_max_size' => env('MIDDLEWARE_CLIENT_LOGGING_REQUEST_BODY_MAX_SIZE' , 102400 ),
'request_headers' => env('MIDDLEWARE_CLIENT_LOGGING_REQUEST_HEADERS' , false ),
'response_body' => env('MIDDLEWARE_CLIENT_LOGGING_RESPONSE_BODY' , false ),
'response_body_max_size' => env('MIDDLEWARE_CLIENT_LOGGING_RESPONSE_BODY_MAX_SIZE' , 102400 ),
'response_headers' => env('MIDDLEWARE_CLIENT_LOGGING_RESPONSE_HEADERS' , false ),
'allowed_headers' => env('MIDDLEWARE_CLIENT_LOGGING_ALLOWED_HEADERS' , ['Content-Type' , 'Authorization' ]),
'sensitive_headers' => env('MIDDLEWARE_CLIENT_LOGGING_SENSITIVE_HEADERS' , ['Authorization' , 'Cookie' ]),
'sensitive_input' => env('MIDDLEWARE_CLIENT_LOGGING_SENSITIVE_INPUT' , ['password' ]),
],
'trace' => [
'disabled' => env('MIDDLEWARE_CLIENT_TRACE_DISABLED' , false ),
'latency_threshold' => env('MIDDLEWARE_CLIENT_TRACE_LATENCY_THRESHOLD' , 3000 ),
'excluded_paths' => env('MIDDLEWARE_CLIENT_TRACE_EXCLUDED_PATHS' , []),
'request_body' => env('MIDDLEWARE_CLIENT_TRACE_REQUEST_BODY' , false ),
'request_body_max_size' => env('MIDDLEWARE_CLIENT_TRACE_REQUEST_BODY_MAX_SIZE' , 102400 ),
'request_headers' => env('MIDDLEWARE_CLIENT_TRACE_REQUEST_HEADERS' , false ),
'response_body' => env('MIDDLEWARE_CLIENT_TRACE_RESPONSE_BODY' , false ),
'response_body_max_size' => env('MIDDLEWARE_CLIENT_TRACE_RESPONSE_BODY_MAX_SIZE' , 102400 ),
'response_headers' => env('MIDDLEWARE_CLIENT_TRACE_RESPONSE_HEADERS' , false ),
'allowed_headers' => env('MIDDLEWARE_CLIENT_TRACE_ALLOWED_HEADERS' , ['Content-Type' , 'Authorization' ]),
'sensitive_headers' => env('MIDDLEWARE_CLIENT_TRACE_SENSITIVE_HEADERS' , ['Authorization' , 'Cookie' ]),
'sensitive_input' => env('MIDDLEWARE_CLIENT_TRACE_SENSITIVE_INPUT' , ['password' ]),
],
]
],
'errors' => true ,
];
protected $middleware = [
\JellyTony\Observability\Middleware\RequestID::class,
\JellyTony\Observability\Middleware\Tracing::class,
\JellyTony\Observability\Middleware\RequestLogging::class,
];
'request_id' => JellyTony\Observability\Middleware\RequestID::class,
'tracing' => JellyTony\Observability\Middleware\Tracing::class,
'logging' => JellyTony\Observability\Middleware\RequestLogging::class,
$app->group(['middleware' => ['request_id' ,'tracing' ,'logging' ]], function (
$app->get('/' , function () {
return $app->version() ;
})
) )
use JellyTony \Observability \Facades \Trace ;
$carrier = array_map(function ($header) {
if ($header[0 ] == "" ) {
return null ;
}
return $header[0 ];
}, $request->headers->all());
$extractor = $this ->tracer->getPropagation()->getExtractor(new Map());
$extractedContext = $extractor($carrier);
$spanName = sprintf("HTTP Server %s: %s" , $request->method(), $request->path());
$span = $this ->tracer->startSpan($spanName, $extractedContext);