Logs & GridQL

GridQL is a Lucene inspired syntax for filter Meya ledgers entries (aka logs). This powerful query language allows to you to examine your ledger entries and debug your Meya conversational apps.

meya.text.event.say text:hi

This would filter logs for all SayEvent entries (or it's subclasses) where the text exactly matches "hi". The "bare" field is assumed to be a type search. You can see the list of types within this API reference.

Logs usage

The most common usage for GridQL is within the Logs UI within the Meya Console.


GridQL in logs


Indexed searches

The following searches are indexed to return immediate log results:

  • Date range / e.g. ["2020-10-05 17:20:00.000-04:00" TO "2020-10-05 17:25:00.000-04:00"]
  • Milliseconds timestamp range / e.g. [1601932800000 TO 1601933100000]
  • Trace ID / e.g. trace_id:tr-39ccfbe2bc65414a901648323c210216
  • Base entry type / e.g. meya.bot.entry
  • Bot ID + thread ID for bot entries / e.g. meya.bot.entry bot_id:bot.default thread_id:t-dfe7fbf4286940baa622ff51cab79561
  • Thread ID for events / e.g. meya.event.entry thread_id:t-dfe7fbf4286940baa622ff51cab79561
  • Request ID for HTTP entries / e.g. meya.http.entry request_id:r-e7874c5e137ab8860571cb4e7beb10edfb558670
  • Thread ID for thread entries / e.g. meya.thread.entry thread_id:t-a7bf49990231475e907e6abe5c14db6c
  • User ID for user entries / e.g. meya.user.entry user_id:u-7ed306b4a79b459c85991be944f8eef9
  • Request ID for WS entries / e.g. meya.ws.entry request_id:r-9822afa989fb4f4a96130c5ea652567e

Runtime usage

GridQL can also be used within custom Grid element code. This can be useful when creating custom integration or log elements.

from meya.core.type_registry import TypeRegistry
from meya.gridql.parser import GridQL
from meya.text.event.say import SayEvent

entry = SayEvent(text="hi")
query = "meya.event.entry.interactive AND NOT (text:*fizz* OR text:*buzz*)"
gridql = GridQL.create(
    query, type_registry=TypeRegistry.current.get()
if gridql.match_entry(entry):
  print("It matched!")
  print("No match :(")

When using


All "interactive" events

For a specific trace

Time range search
["2020-10-05 17:20:00.000-04:00" TO "2020-10-05 17:25:00.000-04:00"]

All incoming web requests
meya.http.entry.request direction:rx

Outgoing web requests for a specific API
meya.http.entry.request direction:tx url:*dialogflow*

All bot lifecycle entries (triggers, flows, component)

Boolean expressions w/ wildcards
meya.event.entry.interactive AND NOT (text:*fizz* OR text:*buzz*)