SkyWalking already supports the three pillars of observability, namely logs, metrics, and traces.
In reality, a production system experiences many other events that may affect the performance of the system, such as upgrading, rebooting, chaos testing, etc.
Although some of these events are reflected in the logs, there are many other events that can not. Hence, SkyWalking provides a more native way to collect these events.
This doc covers the design of how SkyWalking collects events and what events look like in SkyWalking.
## How to Report Events
SkyWalking backend supports three protocols to collect events, gRPC, HTTP, and Kafka. Any agent or CLI that implements one of these protocols can report events to SkyWalking.
Currently, the officially supported clients to report events are:
- [ ] Java Agent Toolkit: Use the Java agent toolkit to report events from inside the applications.
- [x] SkyWalking CLI: Use the CLI to report events from the command line interface.
- [ ] Kubernetes Event Exporter: Deploy an event exporter to refine and report Kubernetes events.
## Event Definition
An event contains the following fields. The definitions of event can be found at the [protocol repo](https://github.com/apache/skywalking-data-collect-protocol/tree/master/event)
### UUID
Unique ID of the event. Because an event may span a long period of time, the UUID is necessary to associate the start time with the end time of the same event.
### Source
The source object that the event occurs on. In the concepts of SkyWalking, the object is typically service, service instance, etc.
### Name
The name of the event. For example, `Start`, `Stop`, `Crash`, `Reboot`, `Upgrade` etc.
### Type
The type of the event. This field is friendly for UI visualization, where events of type `Normal` are considered as normal operations,
while `Error` is considered as unexpected operations, such as `Crash` events, therefore we can mark them with different colors to be easier identified.
### Message
The detail of the event that describes why this event happened. This should be a one-line message that briefly describes why the event is reported. Examples of an `Upgrade` event may be something like `Upgrade from ${from_version} to ${to_version}`.
It's NOT encouraged to include the detailed logs of this event, such as the exception stack trace.
### Parameters
The parameters in the `message` field. This is a simple `<string,string>` map.
### Start Time
The start time of the event. This field is mandatory when an event occurs.
### End Time
The end time of the event. This field may be empty if the event has not stopped yet, otherwise it should be a valid timestamp after `startTime`.
**NOTE:** When reporting an event, you typically call the report function twice, one for starting of the event and the other one for ending of the event, with the same UUID.
There are also cases where you have both the start time and end time already, for example, when exporting events from a 3rd-party system, the start time and end time are already known so that you can call the report function only once.
1. DetectPoint. In Service Mesh sidecar, `client` or `server`. In normal L7 proxy, value is `proxy`.
### Events Report Protocol
The protocol is used to report events to the backend. The [doc](../concepts-and-designs/event.md) introduces the definition of an event, and [the protocol repository](https://github.com/apache/skywalking-data-collect-protocol/blob/master/event) defines gRPC services and messages formats of events.
### 3rd-party instrument protocol
3rd-party instrument protocols are not defined by SkyWalking. They are just protocols/formats, which SkyWalking is compatible and
| - | - | targetPort | The port of target grpc server for receiving export data. | SW_EXPORTER_GRPC_PORT | 9870 |
| health-checker | default | checkIntervalSeconds | The period of check OAP internal health status. Unit is second. | SW_HEALTH_CHECKER_INTERVAL_SECONDS | 5 |
| configuration-discovery | default | disableMessageDigest | If true, agent receives the latest configuration every time even without change. In default, OAP uses SHA512 message digest mechanism to detect changes of configuration. | SW_DISABLE_MESSAGE_DIGEST | false
| receiver-event|default| Read [receiver doc](backend-receivers.md) for more details | - | - |
## Notice
¹ System Environment Variable name could be declared and changed in the application.yml. The names listed here,