Skip to main content

An unofficial Python library for easy interaction with the Humio API

Project description

Humio API (unofficial lib)

This project requires Python>=3.6.1

This is an unofficial library for interacting with Humio's API. If you're looking for the official Python Humio library it can be found here: humiolib. This library mostly exists because the official library was very basic back in 2019 when I first needed this. You probably want the official lib instead.

Installation

pip install humioapi

Main features

  • Untested and poorly documented code
  • CLI companion tool available at humiocli.
  • Asyncronous and syncronous streaming queries supported by httpx.
  • QueryJobs which can be polled once, or until completed.
  • Chainable relative time modifiers (similar to Splunk e.g. -1d@h-30m).
  • List repository details (NOTE: normal Humio users cannot see repos without read permission).
  • Easy env-variable based configuration.
  • Ingest data to Humio, although you probably want to use Filebeat for anything other than one-off things to your sandbox.
  • Create and update parsers.

Usage

For convenience your Humio URL and tokens should be set in the environment variables HUMIO_BASE_URL and HUMIO_TOKEN. These can be set in ~/.config/humio/.env and loaded through humioapi.loadenv(), which loads all HUMIO_-prefixed variables found in the env-file.

Query repositories

Create an instance of HumioAPI to get started

import humioapi
import logging
humioapi.initialize_logging(level=logging.INFO, fmt="human")

api = humioapi.HumioAPI(**humioapi.loadenv())
repositories = api.repositories()

Iterate over syncronous streaming searches sequentially

import humioapi
import logging
humioapi.initialize_logging(level=logging.INFO, fmt="human")

api = humioapi.HumioAPI(**humioapi.loadenv())
stream = api.streaming_search(
    query="log_type=trace user=someone",
    repos=['frontend', 'backend', 'integration'],
    start="-1week@day",
    stop="now"
)
for event in stream:
    print(event)

Itreate over asyncronous streaming searches in parallell, from a syncronous context

import asyncio
import humioapi
import logging

humioapi.initialize_logging(level=logging.INFO, fmt="human")
api = humioapi.HumioAPI(**humioapi.loadenv())

queries = [{
    "query": "chad index.html | select(@timestamp)",
    "repo": "sandbox",
    "start": "-7d@d",
    "stop": "-4d@d",
    }, {
    "query": "chad index.html | select(@rawstring)",
    "repo": "sandbox",
    "start": "-4d@d",
    "stop": "now",
}]

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

try:
    tasks = api.async_streaming_search(queries, loop=loop, concurrent_limit=10)
    for item in humioapi.consume_async(tasks, loop):
        print(item)
finally:
    loop.close()
    asyncio.set_event_loop(None)

Jupyter Notebook

pew new --python=python36 humioapi
# run the following commands inside the virtualenv
pip install git+https://github.com/gwtwod/humioapi.git
pip install ipykernel seaborn matplotlib
python -m ipykernel install --user --name 'python36-humioapi' --display-name 'Python 3.6 (venv humioapi)'

Start the notebook by running jupyter-notebook and choose the newly created kernel when creating a new notebook.

Run this code to get started:

import humioapi
import logging
humioapi.initialize_logging(level=logging.INFO, fmt="human")

api = humioapi.HumioAPI(**humioapi.loadenv())
results = api.streaming_search(query='log_type=trace user=someone', repos=['frontend', 'backend'], start="@d", stop="now")
for i in results:
    print(i)

To get a list of all readable repositories with names starting with 'frontend':

repos = sorted([k for k,v in api.repositories().items() if v['read_permission'] and k.startswith('frontend')])

Making a timechart (lineplot):

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

sns.set(color_codes=True)
sns.set_style('darkgrid')

results = api.streaming_search(query='log_type=stats | timechart(series=metric)', repos=['frontend'], start=start, stop=stop)
df = pd.DataFrame(results)
df['_count'] = df['_count'].astype(float)

df['_bucket'] = pd.to_datetime(df['_bucket'], unit='ms', origin='unix', utc=True)
df.set_index('_bucket', inplace=True)

df.index = df.index.tz_convert('Europe/Oslo')
df = df.pivot(columns='metric', values='_count')

sns.lineplot(data=df)

SSL and proxies

All HTTP traffic is done through httpx, which allows customizing SSL and proxy behaviour through environment variables. See httpx docs for details.

This is unavailable since 0.7.* due to switching to urllib3 as networking backend to solve a problem with random HTTP 502s from the graphql/humio-search-all endpoints.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

humioapi-0.7.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

humioapi-0.7.0-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

Details for the file humioapi-0.7.0.tar.gz.

File metadata

  • Download URL: humioapi-0.7.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.6.8 Linux/3.10.0-1160.11.1.el7.x86_64

File hashes

Hashes for humioapi-0.7.0.tar.gz
Algorithm Hash digest
SHA256 9518a345adc1a5e92cb02b40c482ef3f43aebbdc75c3c8339461e2c4d94b979c
MD5 64ebe5afc3524d149a328ef8b0b41add
BLAKE2b-256 065d8e89ccd975d72c8fa76267631f08f1f438e954925a2491e5e3e6d5877676

See more details on using hashes here.

File details

Details for the file humioapi-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: humioapi-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 24.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.6.8 Linux/3.10.0-1160.11.1.el7.x86_64

File hashes

Hashes for humioapi-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 954d34035f4de739e6076a4921ff1ba0344d7d3c5613c5d1680d28f47ee8803c
MD5 16b39546c02cdefc28fed53bc236ac17
BLAKE2b-256 7e5ab5396e9d60b150af98f6e2512005e67158a5d85cd0c66b8bbdfc8f62e3b1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page