Molten — это инструмент для отслеживания прозрачных звеньев цепи.
Molten отслеживает информацию о работе основной библиотеки PHP во время выполнения и выводит информацию в формате zipkin/optracing.
Molten предлагает множество SAPI, типов выборки, состояния отслеживания, управления модулями и различных типов данных.
На основе языка PHP легко построить распределённую систему отслеживания полной цепочки (ссылка на статью Google Research). В настоящее время система работает в производственной среде на тысячах машин.
Установка
Для установки molten на вашей системе выполните следующие шаги:
phpize
./configure
make && make install
Команда make install
копирует molten.so
в нужное место. Однако вам также необходимо включить модуль в конфигурации PHP, отредактировав свой собственный файл php.ini или добавив molten.ini в /etc/php5/conf.d
, и добавить следующее содержимое: extension=molten.so
.
Во время этапа ./configure
вы также можете добавить --enable-zipkin-header=yes
для поддержки zipkin B3 header.
Быстрый старт
cd example
sh run.sh
В браузере по адресу http://127.0.0.1:9411/zipkin/
можно увидеть информацию о цепочке.
Если вы считаете, что приведённое выше слишком просто, вы можете выполнить следующие действия:
cd example
sh complex.sh
Ну как, круто?
Примечание: Если вы не видите подробную информацию, добавьте 1 час в опцию EndTime.
Подробная информация о примере
Конфигурация
molten.enable
1 включает, 0 выключает, по умолчанию 1
.
molten.service_name
устанавливает имя службы приложения, по умолчанию — default
. Теперь поддерживается добавление ini_set('molten.service_name', 'YOUR_PROJECT_NAME');
в код для разделения разных проектов в одной и той же среде PHP.
molten.tracing_cli
1 отслеживает информацию в режиме CLI, 0 выключено, по умолчанию 0
.
molten.sampling_type
тип выборки, 1 — управление выборкой, 2 — выборка по количеству запросов в минуту, по умолчанию — 1
.
molten.sampling_request
тип выборки — количество выборок по запросу в минуту, по умолчанию — 10
.
molten.sampling_rate_base
тип выборки — вероятность выборки для каждого запроса, по умолчанию — 256
.
molten.notify_uri
URI для уведомления центра управления.
Модуль отчётности использует тот же выходной тип, что и модуль данных.
molten.report_interval
интервал вызова модуля данных, по умолчанию — 60
.
molten.report_limit
верхний предел запроса модуля данных, по умолчанию — 100
.
molten.sink_type
тип данных — запись в файл (1
), запись в стандартный вывод (2
), запись в syslog (3
), отправка через curl (4
), адрес отправки зависит от molten.sink_http_uri
.
molten.output_type
вывод всех блоков отслеживания (span) (1
) или вывод одной строки на блок (2
).
molten.sink_log_path
путь записи файла.
molten.sink_http_uri
URL отправки HTTP.
molten.sink_syslog_unix_socket
отправка журнала в системный журнал UDP unixdomain.
molten.span_format
формат блока отслеживания (span), выбор формата отслеживания для разных систем: zipkin, zipkin_v2 или opentracing.
Функции
molten_span_format()
получает текущий формат отслеживания блока, возвращает строку zipkin или opentracing.
molten_get_traceid()
получает текущий контекстный traceiid, возвращает шестнадцатеричную строку.
molten_set_traceid($trace_id)
устанавливает текущий контекстный traceiid без возврата.
Проверка
php -d extension=molten.so -d molten.enable=1 -d molten.sink_type=2 -d molten.tracing_cli=1 -d molten.sampling_rate=1 -r '$c=curl_init("http://localhost:12345");curl_exec($c);'
Вы увидите следующий вывод:
[{"traceId":"%s","name":"php_curl","version":"php-4","id":"1.1","parentId":"1","timestamp":%d,"duration":%d,"annotations":[{"value":"cs","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}},{"value":"cr","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}}],"binaryAnnotations":[{"key":"http.url","value":"http:\/\/localhost:12345\/","endpoint":{"serviceName":"%s","ipv4":"%s"}},{"key":"error","value":"Failed
connect to localhost:12345; Connection
refused","endpoint":{"serviceName":"%s","ipv4":"%s"}}]},{"traceId":"%s","name":"cli","version":"php-4","id":"1","timestamp":%d,"duration":%d,"annotations":[{"value":"sr","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}},{"value":"ss","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}}],"binaryAnnotations":[{"key":"path","value":"-","endpoint":{"serviceName":"%s","ipv4":"%s"}}]}]
Функциональность
Из приведённой выше конфигурации видно, какие функции мы предоставляем.
molten перехватывает расширения curl, pdo, mysqli, redis, mongodb, memcached, строит информацию отслеживания времени выполнения. Поддерживает функцию полного отслеживания цепочки, molten заменяет функции curl_exec, curl_setopt, curl_setopt_array, а также добавляет заголовки ссылок (x-w-traceid, x-w-spanid и т. д.) в запрос.
Персонализированный формат цепочки поддерживает два популярных формата (zipkin и opentracing).
Два метода выборки и возможность изменения с помощью модуля управления.
В настоящее время molten поддерживает три способа размещения данных: стандартный вывод, файл и HTTP, и может выбирать местоположение вывода.
Используйте протокол HTTP для управления поведением зонда.
Проверьте состояние molten, запросив GET http://domain/molten/status
.
Вывод выглядит следующим образом и уже адаптирован к формату prometheus.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )