Metrics

In addition to writing logs to Solr Pulse can be used as a Metrics aggregator using Apache Kudu as a backend.

Python

Installation

Installing package via pip

pip install pulse-logging

Alternatively you could install by running the setup script.

python setup.py install

Usage

Log Appender

import logging
from pulse import PulseHandler
from pulse import PulseFormatter

pulse_handler = PulseHandler("http://host.com:9001/v2/events/app")
pulse_handler.setFormatter(PulseFormatter())
pulse_handler.setLevel(logging.WARNING)
logger = logging.getLogger(__name__)
logger.setLevel(logging.WARNING)
logger.addHandler(pulse_handler)

try:
    raise ValueError
except ValueError as e:
    logger.exception("Bad stuff")
Logging Configuration File Example

logging.ini file contents

[loggers]
keys=root

[handlers]
keys=pulse_handler

[formatters]
keys=pulse_formatter

[logger_root]
level=WARNING
handlers=pulse_handler

[handler_pulse_handler]
class=handlers.PulseHandler
level=WARNING
formatter=pulse_formatter
args=("http://host.com:9001/v2/events/app")

[formatter_pulse_formatter]
class=pulse.PulseFormatter

main.py file contents

import logging
from logging.config import fileConfig

fileConfig("logging.ini")
logger = logging.getLogger()

try:
    raise ValueError
except ValueError as e:
    logger.exception("Bad stuff")

Writing Metrics

from pulse import MetricWriter

writer = MetricWriter("http://host.com:9001/v1/metrics", "kudu_table_name")
writer.gauge("key1", "r2", 0.952)

writer.close()

REST API

To write metrics to Pulse using the REST API, use the following JSON format and post to a log-collector at the path /v1/metrics/:

{"table_name":"metrics","payload":[{"ts":1,"key":"key","tag":"tag","value":1.4}]}

with values:

  • ts: (Long) a timestamp in epoch format
  • key: (String) the primary key for the metric
  • tag: (String) a tag to enable further filtering of the metric
  • value: (Double) the metric itself