Add Apache HTTP Server status OpenTelemetry input package - #16970
Conversation
|
@claude please do a thorough review -- pay careful attention to the receiver upstream and at our other input packages |
|
Claude finished @strawgate's task in 5m 6s —— View job Review CompleteI've submitted a review with request for changes. Critical Issue Found:
Medium Priority:
What looks good:
See the review for detailed suggestions on fixing the TLS logic. Why is Claude responding? | Type Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not. |
There was a problem hiding this comment.
TLS Configuration Logic Bug (High Priority)
The TLS configuration in agent/input/input.yml.hbs has inverted logic. Currently, the entire TLS block is wrapped in {{#if tls_insecure}}, meaning TLS settings (including ca_file, cert_file, key_file, insecure_skip_verify, server_name_override) are only rendered when tls_insecure=true.
However, insecure: true in OTel configuration means TLS is disabled (plain HTTP). So when users want to use TLS with custom certificates or skip verification, they would set tls_insecure=false, but then none of the TLS settings would be rendered.
Expected behavior: The TLS block should be rendered when TLS settings are provided, not when tls_insecure is true. The insecure field controls whether to use TLS at all, while other TLS fields configure how TLS works when enabled.
Suggested fix for input.yml.hbs lines 31-49:
Additionally, the tls_insecure variable as a way to "disable TLS" is confusing - consider removing it since the upstream receiver doesn't have this field directly; TLS is controlled by protocol in the endpoint URL (http:// vs https://).
Medium Priority Issues
1. Duration fields should use type: duration not type: text
The reference package nginx_input_otel correctly uses type: duration for collection_interval and initial_delay. This PR uses type: text which doesn't provide the same validation benefits.
Files affected: manifest.yml lines 47, 54
2. Missing TLS settings from test policy
The test-default.yml includes tls_insecure: false and tls_insecure_skip_verify: false but the expected output in test-default.expected doesn't show any TLS configuration, which is correct given the current (broken) logic, but should be updated once TLS logic is fixed.
Low Priority / Nitpicks
1. Consider consistency with nginx_input_otel naming
The nginx package uses nginx_otel_input as the directory name, while this uses apache_otel_input. While both are valid, consistency across packages improves discoverability.
2. Documentation mentions "container metrics"
In the PR description: "Comprehensive field definitions for container metrics" - but this package doesn't include field definitions (no fields/ directory) and Apache server-status metrics are not container metrics. Consider updating the PR description.
3. Package type consistency
The nginx_input_otel package has the internal name nginx_otel_input (manifest line 2), matching the PR's naming. Good consistency here.
What Looks Good
- The endpoint default
http://localhost:8080/server-status?automatches the upstream default exactly - Docker test setup correctly enables
mod_statuswithExtendedStatus On - CODEOWNERS entry correctly assigns to
@elastic/obs-infraobs-integrations - Documentation is comprehensive with configuration tables
- Reference to upstream metrics documentation is appropriate
- The httpd.conf test configuration is complete with proper server-status endpoint setup
The TLS logic bug is the critical issue that should be addressed before merge, as it would prevent users from configuring TLS properly.
| - The `mod_status` module must be enabled and accessible | ||
|
|
||
|
|
||
| ## Configuration Options |
There was a problem hiding this comment.
For configuration options, we're currently pointing to the upstream config page to maintain a single source of truth. Otherwise, we'd need to ensure consistency across both documentation sources. Assuming the config parameters are the same in the input packages and upstream receivers, I'd recommend referencing the upstream config directly.
There was a problem hiding this comment.
Documentation has been updated as in other input packages with a reference to the upstream documentation.
| {{/if}} | ||
| processors: | ||
| resourcedetection/system: | ||
| detectors: ["system"] |
There was a problem hiding this comment.
Do we need to provide a yaml box after this to get in the other non default resource attributes enabled if required.
Or do we need this process or at all here ?
There was a problem hiding this comment.
Any suggestion here @ishleenk17 , should then this processor be removed ? Or should we add a new variable to be able to customize the attributes like it was done in hostmetrics_input_otel package ?
There was a problem hiding this comment.
Right now, this PR follows the same approach as the nginx_input_otel package, adding just the resource detection system
integrations/packages/nginx_input_otel/agent/input/input.yml.hbs
Lines 6 to 13 in 592c26b
Should we leave it as it is defined in the nginx_input_otel for now?
|
Converting to draft this PR for now to apply some changes. |
There was a problem hiding this comment.
The package structure looks good and follows the established pattern from nginx_input_otel.
Existing unresolved review threads address the key issues:
- Logo needs OTel branding to match other input packages
- Resource attribute configuration question at line 70 of input.yml.hbs
- Documentation configuration discussion
The TLS configuration template handles various combinations correctly, and the package passes elastic-package validation.
Why is Claude responding? | Type @claude to interact further
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
There was a problem hiding this comment.
Two existing unresolved threads need to be addressed:
_dev/build/docs/README.md:17- Configuration options documentation approachagent/input/input.yml.hbs:70- Resource attributes handling
Additionally:
Minor: The PR description references "Comprehensive field definitions for container metrics" which appears to be copy-pasted from a different package. This is an Apache HTTP Server status package, not a container metrics package.
Why is Claude responding? | Type @claude to interact further
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
There was a problem hiding this comment.
The package structure follows the established OTel input package pattern. A few items to consider:
-
Missing TLS policy test (medium): There's no policy test to validate the TLS configuration template renders correctly. Similar packages (prometheus_input_otel) include a
test-tls.ymltest case. -
Unresolved question: There's an existing thread about whether the resourcedetection processor should be configurable via a YAML variable (similar to
system_configin hostmetrics_input_otel). This decision affects users who need non-default resource attributes.
Why is Claude responding? | Type @claude to interact further
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
There was a problem hiding this comment.
The test-tls-config.expected file has incorrect values that don't match the test-tls-config.yml input:
- Endpoint mismatch: Input specifies
https://localhost:8080/server-status?autobut expected showshttp://localhost:8080/server-status?auto - TLS insecure mismatch: Input specifies
tls_insecure: falsebut expected showsinsecure: true
These discrepancies suggest the expected file was not regenerated after updating the test input, or there's a bug in the template rendering. Please regenerate the expected file using elastic-package test policy to ensure it matches the actual output.
Why is Claude responding? | Type @claude to interact further
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
|
Claude finished @mrodm's task in 42s —— View job Checking Documentation Review Comment
AnswerNo, the documentation comment is no longer applicable - it has been addressed. The referenced review comment from ishleenk17 suggested:
Looking at the current state of ## Configuration
For the full list of settings exposed for the receiver and examples, refer to the [configuration](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/apachereceiver#configuration) section.This approach:
The documentation is appropriately referencing the upstream Apache Receiver configuration page rather than duplicating configuration details locally. Why is Claude responding? | Type Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not. |
…er-status-input-package
💚 Build Succeeded
History
cc @mrodm |
| - context: datapoint | ||
| statements: | ||
| - set(attributes["data_stream.type"], "metrics") | ||
| - set(attributes["data_stream.dataset"], "apache_input_otel.apachereceiver") |
There was a problem hiding this comment.
this will be updated after elastic/elastic-package#3285
|
Package apache_input_otel - 0.1.0 containing this change is available at https://epr.elastic.co/package/apache_input_otel/0.1.0/ |
) This PR adds a new OTel input package that uses the OpenTelemetry Collector's Apache Receiver through the EDOT (Elastic Distribution of OpenTelemetry). --------- Co-authored-by: Marcin "Perk" Stożek <perk@elastic.co> Co-authored-by: Bill Easton <bill.easton@elastic.co> Co-authored-by: Mario Rodriguez Molins <mario.rodriguez@elastic.co>
) This PR adds a new OTel input package that uses the OpenTelemetry Collector's Apache Receiver through the EDOT (Elastic Distribution of OpenTelemetry). --------- Co-authored-by: Marcin "Perk" Stożek <perk@elastic.co> Co-authored-by: Bill Easton <bill.easton@elastic.co> Co-authored-by: Mario Rodriguez Molins <mario.rodriguez@elastic.co>
This package implements an Apache input using the OpenTelemetry Collector's Apache Receiver, following the pattern established in PR #15739
Key features:
Checklist
changelog.ymlfile.I have verified that any added dashboard complies with Kibana's Dashboard good practicesAuthor's Checklist
apachereceiver.oteldataset.How to test this PR locally
Related issues
Screenshots
Using the server name from the system test

svc-apache_input_otel:Generated with Claude Code
Logo generated also with the assistance of copilot.