Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: ADOT Container logs collection #141

Merged
merged 12 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions lib/common/resources/otel-collector-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1637,13 +1637,86 @@ spec:
- source_labels: [ __name__ ]
regex: 'jvm_gc_collection_seconds.*'
action: drop
{{ start enableAdotContainerLogsCollection }}
filelog:
include:
- /var/log/pods/*/*/*.log
include_file_name: false
include_file_path: true
operators:
- id: get-format
routes:
- expr: body matches "^\\{"
output: parser-docker
- expr: body matches "^[^ Z]+ "
output: parser-crio
- expr: body matches "^[^ Z]+Z"
output: parser-containerd
type: router
- id: parser-crio
output: extract_metadata_from_filepath
regex: ^(?P<time>[^ Z]+) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<log>.*)$
timestamp:
layout: 2006-01-02T15:04:05.999999999Z07:00
layout_type: gotime
parse_from: attributes.time
type: regex_parser
- id: parser-containerd
output: extract_metadata_from_filepath
regex: ^(?P<time>[^ ^Z]+Z) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<log>.*)$
timestamp:
layout: '%Y-%m-%dT%H:%M:%S.%LZ'
parse_from: attributes.time
type: regex_parser
- id: parser-docker
output: extract_metadata_from_filepath
timestamp:
layout: '%Y-%m-%dT%H:%M:%S.%LZ'
parse_from: attributes.time
type: json_parser
- id: extract_metadata_from_filepath
parse_from: attributes["log.file.path"]
regex: ^.*\/(?P<namespace>[^_]+)_(?P<pod_name>[^_]+)_(?P<uid>[a-f0-9\-]+)\/(?P<container_name>[^\._]+)\/(?P<restart_count>\d+)\.log$
type: regex_parser
- from: attributes.stream
to: attributes["log.iostream"]
type: move
- from: attributes.container_name
to: resource["k8s.container.name"]
type: move
- from: attributes.namespace
to: resource["k8s.namespace.name"]
type: move
- from: attributes.pod_name
to: resource["k8s.pod.name"]
type: move
- from: attributes.restart_count
to: resource["k8s.container.restart_count"]
type: move
- from: attributes.uid
to: resource["k8s.pod.uid"]
type: move
- from: attributes.log
to: body
type: move
start_at: beginning
{{ stop enableAdotContainerLogsCollection }}
exporters:
prometheusremotewrite:
endpoint: "{{remoteWriteEndpoint}}"
auth:
authenticator: sigv4auth
logging:
loglevel: info
{{ start enableAdotContainerLogsCollection }}
arunvthangaraj marked this conversation as resolved.
Show resolved Hide resolved
awscloudwatchlogs:
log_group_name: "{{logGroupName}}"
log_stream_name: "{{logStreamName}}"
region: "{{awsRegion}}"
endpoint: "logs.{{awsRegion}}.amazonaws.com"
log_retention: {{logRetentionDays}}
raw_log: false
{{ stop enableAdotContainerLogsCollection }}
extensions:
sigv4auth:
region: "{{awsRegion}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@ export default class SingleNewEksGravitonOpenSourceObservabilityPattern {
"{{ stop enableAdotMetricsCollectionTelemetry }}",
jsonStringnew.context["adotcollectormetrics.pattern.enabled"]
);
doc = utils.changeTextBetweenTokens(
arunvthangaraj marked this conversation as resolved.
Show resolved Hide resolved
doc,
"{{ start enableAdotContainerLogsCollection }}",
"{{ stop enableAdotContainerLogsCollection }}",
jsonStringnew.context["adotcontainerlogs.pattern.enabled"]
);
console.log(doc);
fs.writeFileSync(__dirname + '/../common/resources/otel-collector-config-new.yml', doc);

Expand All @@ -76,6 +82,18 @@ export default class SingleNewEksGravitonOpenSourceObservabilityPattern {
);
}

if (utils.valueFromContext(scope, "adotcontainerlogs.pattern.enabled", false)) {
ampAddOnProps.openTelemetryCollector = {
manifestPath: __dirname + '/../common/resources/otel-collector-config-new.yml',
manifestParameterMap: {
logGroupName: `/aws/eks/${stackId}`,
logStreamName: `/aws/eks/${stackId}`,
logRetentionDays: 30,
awsRegion: region
}
};
}

if (utils.valueFromContext(scope, "apiserver.pattern.enabled", false)) {
ampAddOnProps.enableAPIServerJob = true,
ampAddOnProps.ampRules?.ruleFilePaths.push(
Expand All @@ -85,10 +103,6 @@ export default class SingleNewEksGravitonOpenSourceObservabilityPattern {

Reflect.defineMetadata("ordered", true, blueprints.addons.GrafanaOperatorAddon);
const addOns: Array<blueprints.ClusterAddOn> = [
new blueprints.addons.CloudWatchLogsAddon({
logGroupPrefix: `/aws/eks/${stackId}`,
logRetentionDays: 30
}),
new blueprints.addons.XrayAdotAddOn(),
new blueprints.addons.FluxCDAddOn({"repositories": [fluxRepository]}),
new GrafanaOperatorSecretAddon(),
Expand Down
22 changes: 18 additions & 4 deletions lib/single-new-eks-opensource-observability-pattern/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ export default class SingleNewEksOpenSourceobservabilityPattern {
"{{ stop enableAdotMetricsCollectionTelemetry }}",
jsonStringnew.context["adotcollectormetrics.pattern.enabled"]
);
doc = utils.changeTextBetweenTokens(
doc,
elamaran11 marked this conversation as resolved.
Show resolved Hide resolved
"{{ start enableAdotContainerLogsCollection }}",
"{{ stop enableAdotContainerLogsCollection }}",
jsonStringnew.context["adotcontainerlogs.pattern.enabled"]
);
console.log(doc);
fs.writeFileSync(__dirname + '/../common/resources/otel-collector-config-new.yml', doc);

Expand Down Expand Up @@ -97,12 +103,20 @@ export default class SingleNewEksOpenSourceobservabilityPattern {
);
}

if (utils.valueFromContext(scope, "adotcontainerlogs.pattern.enabled", false)) {
ampAddOnProps.openTelemetryCollector = {
manifestPath: __dirname + '/../common/resources/otel-collector-config-new.yml',
manifestParameterMap: {
logGroupName: `/aws/eks/${stackId}`,
logStreamName: `/aws/eks/${stackId}`,
logRetentionDays: 30,
awsRegion: region
}
};
}

Reflect.defineMetadata("ordered", true, blueprints.addons.GrafanaOperatorAddon);
const addOns: Array<blueprints.ClusterAddOn> = [
new blueprints.addons.CloudWatchLogsAddon({
logGroupPrefix: `/aws/eks/${stackId}`,
logRetentionDays: 30
}),
new blueprints.addons.XrayAdotAddOn(),
new blueprints.addons.FluxCDAddOn({"repositories": [fluxRepository]}),
new GrafanaOperatorSecretAddon()
Expand Down