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'
В конфігураційному файлі хендлера ключові значення:
- в секції
main
app_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'