76 lines
2.1 KiB
Markdown
76 lines
2.1 KiB
Markdown
# Event
|
|
|
|
The `Event` API defines what information a report of an event issued by a controller should contain.
|
|
|
|
## Specification
|
|
|
|
Spec:
|
|
|
|
```go
|
|
type Event struct {
|
|
// The object that this event is about.
|
|
// +required
|
|
InvolvedObject corev1.ObjectReference `json:"involvedObject"`
|
|
|
|
// Severity type of this event (info, error)
|
|
// +required
|
|
Severity string `json:"severity"`
|
|
|
|
// The time at which this event was recorded.
|
|
// +required
|
|
Timestamp metav1.Time `json:"timestamp"`
|
|
|
|
// A human-readable description of this event.
|
|
// Maximum length 39,000 characters
|
|
// +required
|
|
Message string `json:"message"`
|
|
|
|
// A machine understandable string that gives the reason
|
|
// for the transition into the object's current status.
|
|
// +required
|
|
Reason string `json:"reason"`
|
|
|
|
// Metadata of this event, e.g. apply change set.
|
|
// +optional
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
|
|
// Name of the controller that emitted this event, e.g. `source-controller`.
|
|
// +required
|
|
ReportingController string `json:"reportingController"`
|
|
|
|
// ID of the controller instance, e.g. `source-controller-xyzf`.
|
|
// +optional
|
|
ReportingInstance string `json:"reportingInstance,omitempty"`
|
|
}
|
|
```
|
|
|
|
Event severity:
|
|
|
|
```go
|
|
const (
|
|
EventSeverityInfo string = "info"
|
|
EventSeverityError string = "error"
|
|
)
|
|
```
|
|
|
|
Controller implementations can use the [fluxcd/pkg/runtime/events](https://github.com/fluxcd/pkg/tree/main/runtime/events)
|
|
package to push events to notification-controller API.
|
|
|
|
## Rate limiting
|
|
|
|
Events received by notification-controller are subject to rate limiting to reduce the
|
|
amount of duplicate alerts sent to external systems like Slack, Sentry, etc.
|
|
|
|
Events are rate limited based on `InvolvedObject.Name`, `InvolvedObject.Namespace`,
|
|
`InvolvedObject.Kind`, `Message`, and `Metadata.revision`.
|
|
The interval of the rate limit is set by default to `5m` but can be configured
|
|
with the `--rate-limit-interval` option.
|
|
|
|
The event server exposes HTTP request metrics to track the amount of rate limited events.
|
|
The following promql will get the rate at which requests are rate limited:
|
|
|
|
```
|
|
rate(gotk_event_http_request_duration_seconds_count{code="429"}[30s])
|
|
```
|
|
|