There’s a very under-documented sharp edge in Loki: you need to give it timestamps as a string, and they need to be a nanosecond epoch.
Minimal example:
#!/usr/bin/env python3
from json import dumps
from requests import post
from time import time
loki_url = 'http://localhost:3100/loki/api/v1/push'
def loki_timestamp():
return f"{(int(time() * 1_000_000_000))}"
payload = {
'streams': [
{
'stream': { 'label1': 'test' },
'values': [
[ loki_timestamp(), 'hello world blah blah'],
[ loki_timestamp(), 'hello world blah blah 2']
]
}
]
}
headers = {'Content-Type': 'application/json'}
response = post(loki_url, json=payload, headers=headers)
print(response.status_code) # 204 is success