Documentation ¶
Overview ¶
Package conditional provides conditional gatherer which runs gatherings based on the rules and only if the provided conditions are satisfied. The rules are fetched from Insights Operator Gathering Conditions Service https://github.com/RedHatInsights/insights-operator-gathering-conditions-service . The rules are validated to check that they make sense (for example we don't allow collecting logs from non openshift namespaces).
To add a new condition, follow the steps described in conditions.go file. To add a new gathering function, follow the steps described in gathering_functions.go file.
Index ¶
- Variables
- type APIRequestCount
- type AlertConditionParams
- type AlertLabels
- type ClusterVersionMatchesConditionParams
- type ConditionType
- type ConditionWithParams
- type ContainerLogRequest
- type GatherAPIRequestCountsParams
- type GatherContainersLogsParams
- type GatherImageStreamsOfNamespaceParams
- type GatherLogsOfNamespaceParams
- type GatherPodDefinitionParams
- type Gatherer
- func (g *Gatherer) BuildGatherAPIRequestCounts(paramsInterface interface{}) (gatherers.GatheringClosure, error)
- func (g *Gatherer) BuildGatherImageStreamsOfNamespace(paramsInterface interface{}) (gatherers.GatheringClosure, error)
- func (g *Gatherer) BuildGatherLogsOfNamespace(paramsInterface interface{}) (gatherers.GatheringClosure, error)
- func (g *Gatherer) BuildGatherPodDefinition(paramsInterface interface{}) (gatherers.GatheringClosure, error)
- func (g *Gatherer) BuildLegacyGatherContainersLogs(paramsInterface interface{}) (gatherers.GatheringClosure, error)
- func (g *Gatherer) GatherContainersLogs(rawLogRequests []RawLogRequest) (gatherers.GatheringClosure, error)
- func (g *Gatherer) GetGatheringFunctions(ctx context.Context) (map[string]gatherers.GatheringClosure, error)
- func (g *Gatherer) GetName() string
- func (g *Gatherer) RemoteConfigStatus() gatherers.RemoteConfigStatus
- type GathererFunctionBuilderPtr
- type GatheringFunctionName
- type GatheringFunctions
- type GatheringRule
- type GatheringRuleMetadata
- type GatheringRulesMetadata
- type InsightsGetClient
- type LogRequest
- type PodNameRegexPrevious
- type RawLogRequest
- type RemoteConfiguration
Constants ¶
This section is empty.
Variables ¶
var ( InvalidReason = "Invalid" AsExpectedReason = "AsExpected" NotAvailableReason = "NotAvailable" )
Functions ¶
This section is empty.
Types ¶
type APIRequestCount ¶
type APIRequestCount struct { ResourceName string `json:"resource"` RemovedInRelease string `json:"removed_in_release"` TotalRequestCount int64 `json:"total_request_count"` LastDayRequestCount int64 `json:"last_day_request_count"` }
APIRequestCount defines a type used when marshaling into JSON
type AlertConditionParams ¶
type AlertConditionParams struct { // Name of the alert Name string `json:"name"` }
AlertConditionParams is a type holding params for alert_is_firing condition
type AlertLabels ¶
AlertLabels defines alert labels as a string key/value pairs
type ClusterVersionMatchesConditionParams ¶
type ClusterVersionMatchesConditionParams struct { // Version is a semantic versioning expression Version string `json:"version"` }
ClusterVersionMatchesConditionParams is a type holding params for cluster_version_matches condition
type ConditionType ¶
type ConditionType string
ConditionType defines conditions to check
const AlertIsFiring ConditionType = "alert_is_firing"
AlertIsFiring is a condition to check that alert is firing the params are in the field `alert`
const ClusterVersionMatches ConditionType = "cluster_version_matches"
ClusterVersionMatches is a condition to check that the current cluster version matches the provided semantic versioning expression
type ConditionWithParams ¶
type ConditionWithParams struct { Type ConditionType `json:"type"` Alert *AlertConditionParams `json:"alert,omitempty"` ClusterVersionMatches *ClusterVersionMatchesConditionParams `json:"cluster_version_matches,omitempty"` }
ConditionWithParams is a type holding a condition with its params
type ContainerLogRequest ¶
type ContainerLogRequest struct { Namespace string PodName string ContainerName string Previous bool MessageRegex *regexp.Regexp }
ContainerLogRequest is a type representing concrete and unique container log request
type GatherAPIRequestCountsParams ¶
type GatherAPIRequestCountsParams struct {
AlertName string `json:"alert_name"`
}
GatherAPIRequestCountsParams defines parameters for api_request_counts gatherer
type GatherContainersLogsParams ¶
type GatherContainersLogsParams struct { AlertName string `json:"alert_name"` Namespace string `json:"namespace,omitempty"` Container string `json:"container,omitempty"` TailLines int64 `json:"tail_lines"` Previous bool `json:"previous,omitempty"` }
GatherContainersLogsParams defines parameters for container_logs gatherer
type GatherImageStreamsOfNamespaceParams ¶
type GatherImageStreamsOfNamespaceParams struct { // Namespace from which to collect image streams Namespace string `json:"namespace"` }
GatherImageStreamsOfNamespaceParams defines parameters for image streams of namespace gatherer
type GatherLogsOfNamespaceParams ¶
type GatherLogsOfNamespaceParams struct { // Namespace from which to collect logs Namespace string `json:"namespace"` // A number of log lines to keep for each container TailLines int64 `json:"tail_lines"` }
GatherLogsOfNamespaceParams defines parameters for logs of namespace gatherer
type GatherPodDefinitionParams ¶
type GatherPodDefinitionParams struct {
AlertName string `json:"alert_name"`
}
GatherPodDefinitionParams defines parameters for pod_definition gatherer
type Gatherer ¶
type Gatherer struct {
// contains filtered or unexported fields
}
Gatherer implements the conditional gatherer
func New ¶
func New( gatherProtoKubeConfig, metricsGatherKubeConfig, gatherKubeConfig *rest.Config, configurator configobserver.Interface, insightsCli InsightsGetClient, ) *Gatherer
New creates a new instance of conditional gatherer with the appropriate configs
func (*Gatherer) BuildGatherAPIRequestCounts ¶
func (g *Gatherer) BuildGatherAPIRequestCounts(paramsInterface interface{}) (gatherers.GatheringClosure, error)
BuildGatherAPIRequestCounts Collects API requests counts for the resources mentioned in the alert provided as a string parameter.
### API Reference None
### Sample data - docs/insights-archive-sample/conditional/alerts/APIRemovedInNextEUSReleaseInUse/api_request_counts.json
### Location in archive - `conditional/alerts/{alert_name}/api_request_counts.json`
### Config ID `conditional/api_request_counts_of_resource_from_alert`
### Released version - 4.10.0
### Backported versions - 4.9.6+
### Changes None
func (*Gatherer) BuildGatherImageStreamsOfNamespace ¶
func (g *Gatherer) BuildGatherImageStreamsOfNamespace(paramsInterface interface{}) (gatherers.GatheringClosure, error)
BuildGatherImageStreamsOfNamespace Closure which collects image streams from the provided namespace
### API Reference - https://docs.openshift.com/container-platform/4.7/rest_api/image_apis/imagestream-image-openshift-io-v1.html#apisimage-openshift-iov1namespacesnamespaceimagestreams
### Sample data - docs/insights-archive-sample/conditional/namespaces/openshift-cluster-samples-operator/imagestreams/example.json
### Location in archive | Version | Path | | --------- | -------------------------------------------------------- | | >= 4.9.0 | conditional/namespaces/{namespace}/imagestreams/{name}.json |
### Config ID `conditional/image_streams_of_namespace`
### Released version - 4.9.0
### Backported versions None
### Changes None
func (*Gatherer) BuildGatherLogsOfNamespace ¶
func (g *Gatherer) BuildGatherLogsOfNamespace(paramsInterface interface{}) (gatherers.GatheringClosure, error)
BuildGatherLogsOfNamespace Collects logs from pods in the provided namespace.
### API Reference - https://github.com/kubernetes/client-go/blob/master/kubernetes/typed/core/v1/pod_expansion.go#L48 - https://docs.openshift.com/container-platform/4.6/rest_api/workloads_apis/pod-core-v1.html#apiv1namespacesnamespacepodsnamelog
### Sample data - docs/insights-archive-sample/conditional/namespaces/openshift-cluster-samples-operator/pods/cluster-samples-operator-8ffb9b45f-49mjr/containers/cluster-samples-operator/logs/last-100-lines.log
### Location in archive - `conditional/namespaces/{namespace}/pods/{pod_name}/containers/{container_name}/logs/last-{n}-lines.log`
### Config ID `conditional/logs_of_namespace`
### Released version - 4.9.0
### Backported versions None
### Changes None
func (*Gatherer) BuildGatherPodDefinition ¶
func (g *Gatherer) BuildGatherPodDefinition(paramsInterface interface{}) (gatherers.GatheringClosure, error)
BuildGatherPodDefinition Collects pod definition from pods that are firing one of the configured alerts.
### API Reference None
### Sample data - docs/insights-archive-sample/conditional/namespaces/openshift-monitoring/pods/alertmanager-main-0/alertmanager-main-0.json
### Location in archive - `conditional/namespaces/{namespace}/pods/{name}/{name}.json`
### Config ID `conditional/pod_definition`
### Released version - 4.11.0
### Backported versions None
### Changes None
func (*Gatherer) BuildLegacyGatherContainersLogs ¶
func (g *Gatherer) BuildLegacyGatherContainersLogs(paramsInterface interface{}) (gatherers.GatheringClosure, error)
BuildLegacyGatherContainersLogs Collects either current or previous containers logs for pods firing one of the alerts from the conditions fetched from insights conditions service.
### API Reference None
### Sample data - docs/insights-archive-sample/conditional/namespaces/openshift-cluster-samples-operator/pods/cluster-samples-operator-8ffb9b45f-49mjr/containers/cluster-samples-operator-watch/logs/last-100-lines.log
### Location in archive - `conditional/namespaces/{namespace}/pods/{pod}/containers/{container}/{logs|logs-previous}/last-{tail-length}-lines.log`
### Config ID `conditional/containers_logs`
### Released version - 4.10.0
### Backported versions None
### Changes None
func (*Gatherer) GatherContainersLogs ¶
func (g *Gatherer) GatherContainersLogs(rawLogRequests []RawLogRequest) (gatherers.GatheringClosure, error)
GatherContainersLogs is used for more dynamic log gathering based on the [Rapid Recommendations](https://github.com/openshift/enhancements/blob/master/enhancements/insights/rapid-recommendations.md).
The remote configuration data is fetched from the Conditional Gathering service (the endpoint is defined [here](https://github.com/openshift/insights-operator/blob/master/config/pod.yaml#L8)). If the remote endpoint is not available or the data cannot be parsed or validated (using JSON schema defined [here](https://github.com/openshift/insights-operator/blob/master/pkg/gatherers/conditional/container_log.schema.json)), the default built-in configuration (see [here](https://github.com/openshift/insights-operator/blob/master/pkg/gatherers/conditional/default_remote_configuration.json)) is used. In case of any issues, user should check the respective clusteroperator conditions (see more information [here](https://github.com/openshift/insights-operator/blob/master/docs/arch.md#how-the-insights-operator-sets-operator-status)) of the Insights Operator.
The configuration used for the data gathering is always stored in the Insights archive in the `insights-operator/remote-configuration.json` file.
The gatherer finds the Pods (and containers) that match the requested data and filters all the container logs to match the specific messages up to a maximum of 6 hours old.
func (*Gatherer) GetGatheringFunctions ¶
func (g *Gatherer) GetGatheringFunctions(ctx context.Context) (map[string]gatherers.GatheringClosure, error)
GetGatheringFunctions returns gathering functions that should be run considering the conditions + the gathering function producing metadata for the conditional gatherer
func (*Gatherer) RemoteConfigStatus ¶
func (g *Gatherer) RemoteConfigStatus() gatherers.RemoteConfigStatus
type GathererFunctionBuilderPtr ¶
type GathererFunctionBuilderPtr = func(*Gatherer, interface{}) (gatherers.GatheringClosure, error)
GathererFunctionBuilderPtr defines a pointer to a gatherer function builder
type GatheringFunctionName ¶
type GatheringFunctionName string
GatheringFunctionName defines functions of conditional gatherer
const ( // GatherLogsOfNamespace is a function collecting logs of the provided namespace. // See file gather_logs_of_namespace.go GatherLogsOfNamespace GatheringFunctionName = "logs_of_namespace" // GatherImageStreamsOfNamespace is a function collecting image streams of the provided namespace. // See file gather_image_streams_of_namespace.go GatherImageStreamsOfNamespace GatheringFunctionName = "image_streams_of_namespace" // GatherAPIRequestCounts is a function collecting api request counts for the resources read // from the corresponding alert // See file gather_api_requests_count.go GatherAPIRequestCounts GatheringFunctionName = "api_request_counts_of_resource_from_alert" // GatherContainersLogs is a function that collects logs from pod's containers // See file gather_containers_logs.go GatherContainersLogs GatheringFunctionName = "containers_logs" // GatherPodDefinition is a function that collects the pod definitions // See file gather_pod_definition.go GatherPodDefinition GatheringFunctionName = "pod_definition" )
func (GatheringFunctionName) NewParams ¶
func (name GatheringFunctionName) NewParams(jsonParams []byte) (interface{}, error)
type GatheringFunctions ¶
type GatheringFunctions = map[GatheringFunctionName]interface{}
GatheringFunctions is a type to map gathering function name to its params
type GatheringRule ¶
type GatheringRule struct { // conditions can be empty Conditions []ConditionWithParams `json:"conditions"` // gathering functions can't be empty GatheringFunctions GatheringFunctions `json:"gathering_functions"` }
GatheringRule is a rule consisting of conditions and gathering functions to run if all conditions are met, gathering_rule.schema.json describes valid values for this struct. An example of it:
{ "conditions": [ { "type": "alert_is_firing", "alert": { "name": "ClusterVersionOperatorIsDown" } }, { "type": "cluster_version_matches", "cluster_version": { "version": "4.8.x" } } ], "gathering_functions": { "gather_logs_of_namespace": { "namespace": "openshift-cluster-version", "keep_lines": 100 } } }
Which means to collect logs of all containers from all pods in namespace openshift-monitoring keeping last 100 lines per container only if cluster version is 4.8 (not implemented, just an example of possible use) and alert ClusterVersionOperatorIsDown is firing
type GatheringRuleMetadata ¶
type GatheringRuleMetadata struct { Rule GatheringRule `json:"rule"` Errors []string `json:"errors"` WasTriggered bool `json:"was_triggered"` }
GatheringRuleMetadata stores metadata about a gathering rule
type GatheringRulesMetadata ¶
type GatheringRulesMetadata struct { Version string `json:"version"` Rules []GatheringRuleMetadata `json:"conditional_gathering_rules"` Endpoint string `json:"endpoint"` }
GatheringRulesMetadata stores metadata about gathering rules
type InsightsGetClient ¶
type LogRequest ¶
type LogRequest struct { Namespace string PodNameRegexToMessages map[PodNameRegexPrevious]sets.Set[string] }
LogRequest is a "sanitized" type, because there can be various requests for the same namespace and this type helps prevent duplicate Pod name regular expressions and duplicate messages
type PodNameRegexPrevious ¶
PodNameRegexPrevious is a helper struct storing the Pod name regular expression value together with a flag saying whether it is for previous container log or not
type RawLogRequest ¶
type RawLogRequest struct { Namespace string `json:"namespace"` PodNameRegex string `json:"pod_name_regex"` Messages []string `json:"messages"` Previous bool `json:"previous,omitempty"` }
RawLogRequest is type used to unmarshal the remote configuration JSON
type RemoteConfiguration ¶
type RemoteConfiguration struct { Version string `json:"version"` ConditionalGatheringRules []GatheringRule `json:"conditional_gathering_rules"` ContainerLogRequests []RawLogRequest `json:"container_logs"` }
RemoteConfiguration is a structure to hold gathering rules with their version