元数据编辑

与 APM 服务器的每个新连接都从 metadata 语句开始。这提供了有关流中其他对象的一般元数据。

APM 服务器不会多次从代理发送此元数据信息,而是会保留此信息,并在必要时将其应用于流中的其他对象。

在 Elasticsearch 中查看文档时,元数据存储在 context 下。

Kubernetes 数据编辑

APM 代理会自动读取 Kubernetes 数据并将其发送到 APM 服务器。在大多数情况下,代理能够从容器内部读取此数据。如果不是这种情况,或者您希望覆盖此数据,则可以设置代理要读取的环境变量。这些环境变量是通过 Kubernetes 下行 API 设置的。以下是将环境变量添加到 Kubernetes pod 规范的方法

         - name: KUBERNETES_NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: KUBERNETES_POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: KUBERNETES_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: KUBERNETES_POD_UID
            valueFrom:
              fieldRef:
                fieldPath: metadata.uid

下表将这些环境变量映射到 APM 元数据事件字段

环境变量 元数据字段名称

KUBERNETES_NODE_NAME

system.kubernetes.node.name

KUBERNETES_POD_NAME

system.kubernetes.pod.name

KUBERNETES_NAMESPACE

system.kubernetes.namespace

KUBERNETES_POD_UID

system.kubernetes.pod.uid

元数据架构编辑

APM 服务器使用 JSON 架构来验证请求。元数据的规范在 GitHub 上定义,并在下面列出

{
  "$id": "docs/spec/v2/metadata",
  "type": "object",
  "properties": {
    "cloud": {
      "description": "Cloud metadata about where the monitored service is running.",
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "account": {
          "description": "Account where the monitored service is running.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "id": {
              "description": "ID of the cloud account.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "name": {
              "description": "Name of the cloud account.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "availability_zone": {
          "description": "AvailabilityZone where the monitored service is running, e.g. us-east-1a",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "instance": {
          "description": "Instance on which the monitored service is running.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "id": {
              "description": "ID of the cloud instance.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "name": {
              "description": "Name of the cloud instance.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "machine": {
          "description": "Machine on which the monitored service is running.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "type": {
              "description": "ID of the cloud machine.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "project": {
          "description": "Project in which the monitored service is running.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "id": {
              "description": "ID of the cloud project.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "name": {
              "description": "Name of the cloud project.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "provider": {
          "description": "Provider that is used, e.g. aws, azure, gcp, digitalocean.",
          "type": "string",
          "maxLength": 1024
        },
        "region": {
          "description": "Region where the monitored service is running, e.g. us-east-1",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "service": {
          "description": "Service that is monitored on cloud",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "name": {
              "description": "Name of the cloud service, intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        }
      },
      "required": [
        "provider"
      ]
    },
    "labels": {
      "description": "Labels are a flat mapping of user-defined tags. Allowed value types are string, boolean and number values. Labels are indexed and searchable.",
      "type": [
        "null",
        "object"
      ],
      "additionalProperties": {
        "type": [
          "null",
          "string",
          "boolean",
          "number"
        ],
        "maxLength": 1024
      }
    },
    "network": {
      "description": "Network holds information about the network over which the monitored service is communicating.",
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "connection": {
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "type": {
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        }
      }
    },
    "process": {
      "description": "Process metadata about the monitored service.",
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "argv": {
          "description": "Argv holds the command line arguments used to start this process.",
          "type": [
            "null",
            "array"
          ],
          "items": {
            "type": "string"
          },
          "minItems": 0
        },
        "pid": {
          "description": "PID holds the process ID of the service.",
          "type": "integer"
        },
        "ppid": {
          "description": "Ppid holds the parent process ID of the service.",
          "type": [
            "null",
            "integer"
          ]
        },
        "title": {
          "description": "Title is the process title. It can be the same as process name.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        }
      },
      "required": [
        "pid"
      ]
    },
    "service": {
      "description": "Service metadata about the monitored service.",
      "type": "object",
      "properties": {
        "agent": {
          "description": "Agent holds information about the APM agent capturing the event.",
          "type": "object",
          "properties": {
            "activation_method": {
              "description": "ActivationMethod of the APM agent capturing information.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "ephemeral_id": {
              "description": "EphemeralID is a free format ID used for metrics correlation by agents",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "name": {
              "description": "Name of the APM agent capturing information.",
              "type": "string",
              "maxLength": 1024,
              "minLength": 1
            },
            "version": {
              "description": "Version of the APM agent capturing information.",
              "type": "string",
              "maxLength": 1024
            }
          },
          "required": [
            "name",
            "version"
          ]
        },
        "environment": {
          "description": "Environment in which the monitored service is running, e.g. `production` or `staging`.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "framework": {
          "description": "Framework holds information about the framework used in the monitored service.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "name": {
              "description": "Name of the used framework",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "version": {
              "description": "Version of the used framework",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "id": {
          "description": "ID holds a unique identifier for the running service.",
          "type": [
            "null",
            "string"
          ]
        },
        "language": {
          "description": "Language holds information about the programming language of the monitored service.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "name": {
              "description": "Name of the used programming language",
              "type": "string",
              "maxLength": 1024
            },
            "version": {
              "description": "Version of the used programming language",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          },
          "required": [
            "name"
          ]
        },
        "name": {
          "description": "Name of the monitored service.",
          "type": "string",
          "maxLength": 1024,
          "minLength": 1,
          "pattern": "^[a-zA-Z0-9 _-]+$"
        },
        "node": {
          "description": "Node must be a unique meaningful name of the service node.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "configured_name": {
              "description": "Name of the service node",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "runtime": {
          "description": "Runtime holds information about the language runtime running the monitored service",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "name": {
              "description": "Name of the language runtime",
              "type": "string",
              "maxLength": 1024
            },
            "version": {
              "description": "Name of the language runtime",
              "type": "string",
              "maxLength": 1024
            }
          },
          "required": [
            "name",
            "version"
          ]
        },
        "version": {
          "description": "Version of the monitored service.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        }
      },
      "required": [
        "agent",
        "name"
      ]
    },
    "system": {
      "description": "System metadata",
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "architecture": {
          "description": "Architecture of the system the monitored service is running on.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "configured_hostname": {
          "description": "ConfiguredHostname is the configured name of the host the monitored service is running on. It should only be sent when configured by the user. If given, it is used as the event's hostname.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "container": {
          "description": "Container holds the system's container ID if available.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "id": {
              "description": "ID of the container the monitored service is running in.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            }
          }
        },
        "detected_hostname": {
          "description": "DetectedHostname is the hostname detected by the APM agent. It usually contains what the hostname command returns on the host machine. It will be used as the event's hostname if ConfiguredHostname is not present.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "host_id": {
          "description": "The OpenTelemetry semantic conventions compliant \"host.id\" attribute, if available.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "hostname": {
          "description": "Deprecated: Use ConfiguredHostname and DetectedHostname instead. DeprecatedHostname is the host name of the system the service is running on. It does not distinguish between configured and detected hostname and therefore is deprecated and only used if no other hostname information is available.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "kubernetes": {
          "description": "Kubernetes system information if the monitored service runs on Kubernetes.",
          "type": [
            "null",
            "object"
          ],
          "properties": {
            "namespace": {
              "description": "Namespace of the Kubernetes resource the monitored service is run on.",
              "type": [
                "null",
                "string"
              ],
              "maxLength": 1024
            },
            "node": {
              "description": "Node related information",
              "type": [
                "null",
                "object"
              ],
              "properties": {
                "name": {
                  "description": "Name of the Kubernetes Node",
                  "type": [
                    "null",
                    "string"
                  ],
                  "maxLength": 1024
                }
              }
            },
            "pod": {
              "description": "Pod related information",
              "type": [
                "null",
                "object"
              ],
              "properties": {
                "name": {
                  "description": "Name of the Kubernetes Pod",
                  "type": [
                    "null",
                    "string"
                  ],
                  "maxLength": 1024
                },
                "uid": {
                  "description": "UID is the system-generated string uniquely identifying the Pod.",
                  "type": [
                    "null",
                    "string"
                  ],
                  "maxLength": 1024
                }
              }
            }
          }
        },
        "platform": {
          "description": "Platform name of the system platform the monitored service is running on.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        }
      }
    },
    "user": {
      "description": "User metadata, which can be overwritten on a per event basis.",
      "type": [
        "null",
        "object"
      ],
      "properties": {
        "domain": {
          "description": "Domain of the logged in user",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "email": {
          "description": "Email of the user.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        },
        "id": {
          "description": "ID identifies the logged in user, e.g. can be the primary key of the user",
          "type": [
            "null",
            "string",
            "integer"
          ],
          "maxLength": 1024
        },
        "username": {
          "description": "Name of the user.",
          "type": [
            "null",
            "string"
          ],
          "maxLength": 1024
        }
      }
    }
  },
  "required": [
    "service"
  ]
}