-
Notifications
You must be signed in to change notification settings - Fork 165
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
Distribution Proposal: Kubernetes-specific distribution #357
Comments
Although I'm not opposed to a k8s distro, I would like to see further discussions on what distros are officially supported by the community progress before making a decision here. See the otep: open-telemetry/oteps#229 |
A note for the proposed manifest is that the observer extensions are primarily supported by the receiver creator so it would ideally be included as well. |
Thank you for the proposal, @TylerHelmuth. It makes a lot of sense. I would even go one step further and suggest yet another one for sidecars, containing only OTLP receiver/exporter and batching processor. We can talk about that on another issue, though. I have a few comments/questions about some components.
I feel ashamed for not knowing this, but does this work on Kubernetes? I was always under the impression that this was for "pure" Docker environments. It would be nice to get a positive confirmation from someone using this with their Collector on Kubernetes.
I'm curious why Prometheus components were selected but not other open-source solutions we promised compatibility with, like Jaeger and Zipkin. I have good arguments for having a Prometheus receiver while still not having a Jaeger receiver, but not so much for a Prometheus exporter when Jaeger is missing. And even if we can make a case for a Prometheus exporter, I would keep only the remote-write exporter, not this one. My suggestion: remove this one, keep the remote-write exporter, and document why we have this exporter but not Jaeger (because it can ingest OTLP already?) and Zipkin (no active code owners?)
If you include this, you probably need the load-balancing exporter as well so that users can have a scalable tail-sampling setup.
I would include a Jaeger receiver there. While the Jaeger client libraries have been deprecated for some time, some users still have services instrumented with OpenTracing+Jaeger. |
+1 on the proposal. I agree with @jpkrohling I would expect that other OSS receivers (e.g. Zipkin, Jaeger, OpenCensus) would be included in the distro. |
One question i have is how the release process can be improved to support N distributions. The goreleaser tooling has already hit disk limits with only the two distros we've currently supporting. This isn't to say we shouldn't do this, but that we'll need to spend some cycles finding ways to split the release process to support this. Maybe this could be a separate issue. Specifically around the k8s distro, would it make sense for different owners to be listed? I understand the overlap of the groups may be enough to have collector-contrib-approvers as the owners for now, but it may not be the case with future distros (one example is @MovieStoreGuy's suggestion of a lambda distro). |
@rmfitzpatrick I don't know much about the receiver creator, but is it useful for monitoring Kubernetes or applications that run on Kubernetes? If not, I'd opt to remove the observer extensions if the other components don't require them. @jpkrohling after doing a quick test I think you're right. I have removed the dockerobserverextension and dockerstatsreceiver. I included all prometheus receiver because it directly related to the rule: "All receivers must facilitate the collection of data that is generated by Kubernetes or services running in Kubernetes". Looking at the rules now they need some work to clarify which exporters should be included. As for jaeger and zipkin, I think their inclusion will be based on some of the outcomes of #360. Again, I think this could use more rules clarification. Part of me says they can be included bc the facilitate monitoring applications running in Kubernetes and the other part of me says that OTLP meets that goal so we don't need them. A big question that #360 will answer is "do all the distros this community supports need to include support for previous standards?". Would definitely appreciate some ideas on how to adjust to rules to clearly allow or disallow the receivers and/or exporters. We may need a specific rule for which receivers the distro allows and which exporters the distro allows. Good point on the loadbalancingexporter, that definitely facilitates telemetry collection in k8s. I have added it. @codeboten I added the Release pipeline question to #360 for now. I think open-telemetry/collector-contrib-approvers should continue to own everything in the repo to guarantee someone is responsible, but I like the idea of different distributions having other supporting owners. I can see the opentelemetry-operator-approvers and opentelemetry-helm-approvers helping support this distribution. |
Based on the discussion so far there there is definitely a need to touch up the rules. Here are some ideas popping into my head:
|
It's helpful for dynamically instantiating other included receivers based on discovered pod/port/node endpoints as presented by the k8s observer: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/receivercreator#rule-expressions. It operates similarly to the prometheus |
Ok, it sounds like it qualifies then. I've updated the manifest. |
@TylerHelmuth can you point to a piece of documentation that mentions this? I searched but couldn't find any. |
@astencel-sumo the recommendation can be found here: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib#recommendation |
I think we should have only OTLP exporters for the Kubernetes distribution. Pretty much everything out there supports ingesting OTLP already, including Jaeger. I remember seeing an issue on Prometheus' side about adding native OTLP ingestion there as well, so, I believe we won't need a Prometheus exporter for this new distribution. On the receiver side, I have two ways of seeing this:
Between the two, I prefer the second, as it's more objective than the first. |
@jpkrohling I'm good with supporting only exporters that use OTLP and also the logging exporter. I'm also ok with bullet 2, I have a feeling that's where #360 will go anyways. |
When using a DaemonSet to read container logs and kubelet logs, the |
I'd say if it is a useful component in k8s then it should be considered for inclusion. What extra dependencies does it require? I am not aware of anything special our existing Contrib pipeline is doing for this receiver. |
We (observIQ) install AFAIK, a native pure Go implementation for reading from the journal does not exist, so dependence on the journalctl command is necessary. |
journald support can be implemented with go bindings (see coreos/go-systemd). This is what is used in promtail (see here). systemd libs are still needed and promtail uses |
The journald dependency problem is a bit complicated. If you include a specific version of the systemd libs in the container image, you can run into compatibility issues if the delta between your version and the host's is large enough. It's safest to mount the libraries from the host, but that requires more work from the user. In the interest of unblocking this release, I'd suggest including the receiver without the binary dependencies, and moving this discussion to a new issue. |
Description
Many many users run the collector in Kubernetes today and the OpenTelemetry project has encouraged that behavior via the helm charts, operator, and Kubernetes-specific components. To continue fostering the concept that the Collector is a terrific solution for monitoring Kubernetes I believe we need a more direct approach.
In order to facilitate a good default image for the OpenTelemetry-helm-charts, OpenTelemetry-operator, and any user looking to monitor Kubernetes, I propose that we introduce a new community-supported distribution specifically made for monitoring Kubernetes. This distribution will provide an alternative to the Contrib distribution, which we do not recommend be used in production, for users who want to use a community supported image vs building their own.
Benefits:
Rules for components in the image:
This is only my initial ruleset, I am very interested in the community's opinions and feedback.
Proposed manifest:
Please carefully review this manifest. I believe I have created it correctly based on the initial rules laid out above, but I may have missed a component or two that meets the criteria.
Manifest Change Histroy
Additional Info
This topic has come up recently in the Collector SIG, but again in the Operator SIG. Please see the SIG notes for details.
/cc @open-telemetry/operator-approvers
The text was updated successfully, but these errors were encountered: