Logging Handler який відслідковує задані в конфігураційному файлі MESSAGE_ID
і відсилає у statsite метрики які передаються в полі з префіксом perfdata.
import logging
from statsdhandler.statsdhandler import StatsdHandler
import time
logger = logging.getLogger('logger_name')
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('path_to_log.log')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
sdh = StatsdHandler(config_path='path/to/config')
sdh.setLevel(logging.DEBUG)
logger.addHandler(fh)
logger.addHandler(ch)
logger.addHandler(sdh)
start = time()
logger.info('Increment counter', extra={'MESSAGE_ID': 'DOCUMENT_UPDATE',
'perfdata.c.': 1})
logger.info('Increment counter with some value',
extra={'MESSAGE_ID': 'DOCUMENT_SAVE', 'perfdata.c.': 3})
logger.info('Set dimension', extra={'MESSAGE_ID': 'INDEXATION_PROGRESS',
'perfdata.kv.index_name': 97})
end = time()
logger.debug('Timer metric', extra={'MESSAGE_ID': 'LOGGING_DURATION',
'perfdata.ms.metric_name': end - start})Ключові значення в параметрі extra:
MESSAGE_ID- має мати значення одне з таких які задані в конфіг файліperfdata.<metic_type>.<metric_name>- це назва поля з якою працює хендлер складається поле:perfdata- префікс для хендлера<metric_type>- це тип метрики яку віддаватимемо в statsite може мати наступні значенняkv,raw- для відправлення метрик типу <ключ>:<значення>ms,h- для відправлення таймерівc- для відправлення лічильниківg- для відправлення gauge метрик
<metric_name>- (уточнююча) назва метрики, якщо в словнику вextraпередати 'perf-параметр' наступного форматуperfdata.MESSAGE_ID.то замість назви метрики підставиться MESSAGE_ID в lowercase.
Лістінг конфігураційного файлу хендлера
main:
app_key: app_key
host: localhost
port: 8125
sample_rate: 1
disabled: False
publish_formats:
DOCUMENT_UPDATE:
- '%(logger)s;%(message_id)s;%(metric_name)s'
DOCUMENT_SAVE:
- '%(logger)s;%(message_id)s;%(metric_name)s'
INDEXATION_PROGRESS:
- '%(logger)s;%(message_id)s;%(metric_name)s'
LOGGING_DURATION:
- '%(logger)s;%(message_id)s;%(metric_name)s'
- '%(message_id)s;%(metric_name)s'
- '%(metric_name)s'В конфігураційному файлі хендлера ключові значення:
- в секції
mainapp_key- ключ для метрик, щоб потім можна було розкинути метрики по відповідних pipe'ахhost- ІР на якому 'крутиться' statsiteport- порт на якому крутиться statsite повний опис тут
- в секції
publish_formats:DOCUMENT_SAVE,DOCUMENT_UPDATE,INDEXATION_PROGRESS,LOGGING_DURATION- цеMESSAGE_ID's які хендлер буде відсліковувати і вісилати метрики в заданих форматах'%(logger)s;%(message_id)s;%(metric_name)s'- формат в якому будуть відіслані метрики в statsite наприклад при даному форматі в statsiste відправиться наступний рядок для таймера'app_key;logger_name;MESSAGE_ID;metric_name:value|ms'