Thundra

Thundra: Serverless Observability for AWS Lambda

The black box nature of AWS Lambda and other serverless environments means that identifying and fixing performance issues is difficult and time-consuming. Built for straightforward debugging, monitoring, and observability, Thundra provides deep insight into your entire serverless environment. Thundra collects and correlates all your metrics, logs, and traces, allowing you to quickly identify problematic invocations and also analyzes external services associated with that function. With Thundra’s zero overhead and automated instrumentation capabilities, your developers are free to write code without worrying about bulking up their Lambdas or wasting time on chasing black box problems.

Get Started    Discussions

Monitoring Data Tags

Monitoring Data is the data sent by Thundra upon monitoring your Lambda functions. This data is usually added with other data pertaining to specific parts of observability. This is embedded in applicationTags which is a base field in monitor data.

  • span.kind | string
    Either "client" or "server" for the appropriate roles in an RPC, and "producer" or "consumer" for the appropriate roles in a messaging scenario.

  • span.trigger_info | triggerInfo
    All span information pertaining to how the span was triggered. Has sub-tags that is as below:

    • domainName | string
      The domain of the component which triggers the span
    • className | string
      Class of the component which triggers the span
    • operationNames | set<string>
      Names of the operations from the component which triggers the span. In here there can be multiple operation names because the span might be triggered by a batch of operations. For example:

      Triggered by messages from multiple topics
      Triggered by messages from > multiple queues
      ...

  • error | boolean
    true if and only if the application considers the operation represented by the Span to have failed.

  • error.kind | string
    The type or kind of an error. For example: “Exception”, “IOException”, “OSError" etc.

  • error.message | string
    The message of the error. For example: “Could not connect to database”, “Could not read from file” etc.

  • error.object | *
    For languages that support such a thing (e.g., Java, Python), the actual Throwable/Exception/Error object instance itself.

  • error.stack | string
    The stack trace in platform-conventional format; may or may not pertain to an error.

  • error.code | integer
    Stack trace in platform-conventional format; may or may not pertain to an error.

  • method.args | list<args>
    Arguments of the method. arg is a complex type and has sub attributes that can could be found as below:

    • name | string
      Name of the argument
    • type | string
      Type of the argument. Type representation is runtime dependent. For example string type can be represented as java.lang.String for Java runtime.
    • value | *
      Value of the argument
[
    {
        “name”: “userId”,
        “type”, “java.lang.Long”,
        “value”: 123456789
    },
    {
        “name”: “userName”,
        “type”, “java.lang.String”,
        “value”: “sozal”
    },
    {
        “name”: “userAddress”,
        “type”, “com.mycompany.Address”,
        “value”: {
            “country”: “Turkey”,
            “city”: “Ankara”
        }
    }
]
  • method.return_value | retVal
    The return value of the method. retVal is a complex type and has sub-tags that can be found as below:
    • type | string
      Type of the return value. Type representation is runtime dependent. For example: string type can be represented as java.lang.String for Java runtime.
    • value | string
      Value of the argument.
{
   “type”, “com.mycompany.User”,
   “value”: {
        “userId”: 123456789,
        “userName”: “sozal”,
        “address”: {
            “country”: “Turkey”,
            “city”: “Ankara”
        }
    }
]
  • db.instance | string
    Database instance name. For example:
    In java, if the jdbc.url="jdbc:mysql://127.0.0.1:3306/customers", the instance name is customers.

  • db.type | string
    Database type. For any SQL database, sql. For others, the lower-case database category, e.g. cassandra, hbase, or redis.

  • db.statement | string
    A database statement for the given database type. For example,

    db.type is sql, statement is > SELECT * FROM user
    db.type is redis, statement is SET mykey 'myalue'

  • db.user | string
    Username for accessing database. E.g., readonly_user or reporting_user.

  • http.method | string
    HTTP method of the request for the associated Span. For example: "GET", "POST", "PUT", "DELETE"

  • http.status_code | integer
    HTTP response status code for the associated Span. For example: "200", "404", "500", etc.

  • http.url | string
    URL of the request being handled in this segment of the trace, in standard URI format. For example: "https://domain.net/path/to?resource=here"

  • aws.region | string
    Name of the AWS region. For example: "us-west-2", "eu-west-2", etc.

  • aws.lambda.name | string
    Name of the AWS Lambda function. For example: "user-get".

  • aws.lambda.arn | string
    ARN of the the AWS Lambda function. For example: "arn:aws:lambda:us-west-2:123456789012:function:user-get".

  • aws.lambda.memory.limit | integer
    Memory limit of the AWS Lambda function in MB. For example: "256", "512", etc.

  • aws.lambda.log_group_name | string
    Name of the AWS CloudWatch log group where logs of the AWS Lambda function is streamed. For example: "/aws/lambda/user-get", "/aws/lambda/user-save", etc.

  • aws.lambda.log_stream_name | string
    Name of the AWS CloudWatch log stream where logs of the AWS Lambda function is streamed. For example: "2018/05/30/[$LATEST]563b82f391714a39bc1194b0fc8162f4".

  • aws.lambda.invocation.cold_start | boolean
    true if invocation is cold start, false otherwise.

  • aws.lambda.invocation.timeout | boolean
    true if invocations fails with timeout, false otherwise.

  • aws.lambda.invocation.timeout.stack | *
    A stack trace of all or some parts of the AWS Lambda application when the timeout is detected in platform-conventional format.

  • aws.lambda.invocation.billed_cost | double
    Billed cost of AWS Lambda invocation in dollar.

  • aws.lambda.invocation.request_id | string
    Request id of the invocation.

  • aws.lambda.invocation.request | *
    Request of the invocation.

  • aws.lambda.invocation.response | *
    Request of the invocation.