Instrument service for logs and metrics
Project description
taylor-instrument service
A service based on Pip.Services toolkit that collect logs and metrics by Elasticsearch and Prometheus.
- pip-services3-commons
- pip-services3-components
- pip-services3-rpc
- pip-services3-prometheus
- pip-services3-elasticsearch
- Documentation
Use
Install the Python package as
pip install taylor-instrument
Configure environment variables:
- INSTRUMENTATION_PORT - port number for instrument service (default: 8082)
- CORRELATION_ID - correlation id of the service
- ELASTICSEARCH_ENABLED - enable ElasticSearch logger
- ELASTICSEARCH_INFO - loge level (default: info)
- ELASTICSEARCH_SOURCE - source (context) name
- ELASTICSEARCH_PROTOCOL - connection protocol: http or https (default: http)
- ELASTICSEARCH_SERVICE_HOST - host name or IP address (default: localhost)
- ELASTICSEARCH_SERVICE_PORT - port number (default: 9200)
- PROMETHEUS_ENABLED - enable prometheus logs and metrics
- PROMETHEUS_PROTOCOL - connection protocol: http or https (default: http)
- PROMETHEUS_SERVICE_HOST - host name or IP address (default: localhost)
- PROMETHEUS_SERVICE_PORT - port number (default: 9090)
- PUSHGATEWAY_PROTOCOL - connection protocol: http or https (default: http)
- PUSHGATEWAY_METRICS_SERVICE_HOST - host name or IP address (default: localhost)
- PUSHGATEWAY_METRICS_SERVICE_PORT - port number (default: 9091)
- COUNTERS_INTERVAL - interval in milliseconds to save current counters measurements (default: 5 mins)
For more environment configs see above links.
Then use loggers and metrics in your services:
from pip_services3_commons.errors import ApplicationException
from pip_services3_components.log import LogLevel
from taylor_instrument import instrument, logger, counters
# Configure instrument
from taylor_instrument.metrics import metrics
instrument.set_correlation_id_from_file('./component.json')
instrument.logger.set_level(LogLevel.Debug)
def info_service():
counters.increment_one('my_service.info.calls')
timing = counters.begin_timing('my_service.info.exec_time')
logger.warn(message='warning', correlation_id='my custom correlation id')
logger.debug('debug')
logger.trace('Trace')
try:
raise FileNotFoundError('My exception1')
except Exception as e:
logger.error(ApplicationException().with_cause(e), 'my error message')
logger.info('my custom correlation id', None, 'Info')
try:
raise IOError('My exception2')
except Exception as e:
logger.fatal(ApplicationException().with_cause(e), 'Fatal exception')
timing.end_timing()
@metrics('my-custom-optional-name')
def info_service_2():
logger.info('Using decorator metrics %s', 'Info')
info_service()
info_service_2()
The loggers have next signatures:
def log(self, level: LogLevel, error: ApplicationException, message: str, *args,
correlation_id: Optional[str] = None, **kwargs):
...
def fatal(self, error: ApplicationException, message: str, *args, correlation_id: Optional[str] = None, **kwargs):
...
def error(self, error: ApplicationException, message: str, *args, correlation_id: Optional[str] = None, **kwargs):
...
def warn(self, message: str, *args, correlation_id: Optional[str] = None, **kwargs):
...
def info(self, message: str, *args, correlation_id: Optional[str] = None, **kwargs):
...
def debug(self, message: str, *args, correlation_id: Optional[str] = None, **kwargs):
...
def trace(self, message: str, *args, correlation_id: Optional[str] = None, **kwargs):
...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.