# Functions

GetLogEntryMessage gets the message body of a LogEntry based on what kind of payload it is If it's JSON, we look for the `message` field since the other fields will be added as labels.
GetLogLabels flattens a log entry's labels + resource labels into a map.
GetLogLevel maps the string value of a LogSeverity to one supported by Grafana.
NewClient creates a new Client using jsonCreds for authentication.
NewClient creates a new Clients using GCE metadata for authentication.
NewClient creates a new Clients using service account impersonation.

# Structs

Client wraps a GCP logging client to fetch logs, a resourcemanager client to list projects, and a config client to get log bucket configurations.
Query is the information from a Grafana query needed to query GCP for logs.

# Interfaces

API implements the methods we need to query logs and list projects from GCP.