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
integrate go.d into netdata #5006
Comments
Three options: move code into netdata/netdataPros:
Cons:
git submoduleUse a concept of git submodules for vendoring go.d.plugin code into netdata repo. Pros:
Cons:
ReleasesDo separate releases of go.d.plugin Pros:
Cons:
|
Also everything from #4129 is relevant to this issue. |
Additional cons for separate releases:
I'm personally leaning towards having it in netdata/netdata, with second option the submodule. Can you explain a the 'repo synchronization' issue a bit more? @ilyam8 which ones are your favorites? |
@cakrit A Git submodule works by specifying an exact remote commit hash which is checked out when the submodule is initialized. This has a whole lot of nasty implications, with the biggest two being that you cant track the top commit of a branch in the submodule (including not being able to track the tip of the default branch), and once you commit an update in the main repository to what commit is tracked from the submodule, you can't rebase that commit or anything before it in the submodule's repo or everything falls apart. Personally, I'm also in favor of the combined repo, it's a bit more complicated for CI, but it significantly simplifies things for users. |
I want |
I would very much suggest that we look into versioning the external plugin API, as that will greatly simplify the version compatibility issues (Netdata would then be easily able to tell people that the plugin version is bad, instead of just randomly failing). |
Personally I am in favor of doing a separate releases. |
In light of the number of issues being opened about moving stuff to If we go with merging @ktsaou, your opinion would be helpful here. |
I think the technical solution is not that important. We can pick any of the solutions is more convenient, provided that:
So, I agree with @Ferroin that the key here is the user experience. If you can make it simple for users, any solution is acceptable. If you can't make it simple for users, then I suggest to use the solution that is simpler for them. There is also another alternative: merge everything in now (the currently simplest for users), and split it when we will have our own packaging (it will be the simplest for users at that time). |
if we move go plugin into netdata repo, users need golang to compile the whole project. |
This is a nice idea too. |
In addition, golang relay on git commits and tags to versioning. Enforce netdata’s git tag may not fit the go plugin’s development cycle. |
Those are solved when doing separate releases :) |
Fully disagree. In this case technical solution directly translates to user experience. If we have two separate repos, then:
|
No, only the tagging issue is. If
|
This is what I said too. User experience is the important factor. Not the technical solution.
This is not bad. Actually I would love if we could have more, so that focus communities can be built.
Since Go is a compiled language, it would also be nice if our Go installer could fetch third party plugins into it. This means we could split But let's solve the most basic problem first: how to have |
installing and compiling are very easy. please check this dockerfile. |
@Wing924 The issue isn't any difficulty in installing and compiling, it's getting it integrated with the regular Netdata installs, which is kind of a prerequisite for actually switching anything it supports to using it instead of the existing (usually Python) modules. Then there's also the fact that it has to be rebuilt to include any extra modules you might want that are written in Go. |
I think option 3 from @paulfantom post is very nice and a way to go.
If you are talking about custom modules - no official custom modules support for now. If someone need custom module - python. |
I still contend that if we are going to do that we need to:
|
|
Yes, the external plugin API for Netdata itself. My reasoning on this is about the same as versioning a REST API, it lets you check that things behave the way you expect them to, makes sure you know what you can actually use, and ensures that you can complain in a useful manner if those requirements aren't met. |
We agreed on not including go.d.plugin into v1.12 release mostly due to problems with configuration. Just after cutting out v1.12 release I will create a PR which allows to optionally install go.d.plugin. How it will work:On
Steps on installer side:
All checksum embedding and comparison is needed to be sure we are downloading what we need and when we need it. I am considering extending it with GPG in the future to increase security even more. Installation conditionalityDue to problems with configuration handling we will include TranslatorWe want to kill two birds with one stone. To do this |
As we discussed, there are 3 cases about go.d.plugin modules:
I understand that 1 and 2 are pretty simple and the initial integration of go.d.plugin in netdata could take care of them. Then, for 3 we need a configuration converter. |
Not so simple. Python will use stock configuration in that case. |
I guess the whole idea is to find a way to selectively disable python.d.plugin modules and enable the corresponding go.d.plugin modules. Can we avoid this? |
I think we should stick to |
Maybe this flow: 1.12:
1.13:
In that case we don't need any translators. It's clear for me. I understand that it always be some users which didn't read announcement. But it is 2 month still. |
I think the approach proposed by @ilyam8 is probably the best way to go, but it should be kept in mind that we can't realistically convert everything quickly. We should probably also continue to accept new modules written in Python unless we want to potentially exclude a sizable number of developers from contributing. |
@ilyam8 I am very sorry. This makes netdata significantly worst. I can only accept solutions that will improve user experience. |
@ktsaou Some feedback on how you feel it makes things worse would be good. Given that the plan (at least, as I understood it) has been to migrate stuff from python.d to go.d, this seems to be the most logical approach to integrating the go.d plugin with Netdata while giving users adequate warning that things are changing. |
@Ferroin the current proposal means that all users that have configured netdata python.d.plugin data collection plugins:
To my understanding the above can be avoided:
Therefore, I understand that the current proposal will unnecessarily complicate things, requiring from our users to manually re-configure data collection. A lot of wasted effort. It also assumes that netdata will forever support 2 different ways for configuring the same thing: the python way and the go way. If you check the netdata home page and README.md, netdata is about making things simpler. Zero configuration, immediate results, a system that offers its users the ability to focus on their monitoring work, not on the internals of the tool, etc. So, to my understanding, the proposed way increases configuration complexity unnecessarily. |
I see no reason that what @ilyam8 proposed couldn't be combined with proper configuration migration/management. Overall, the transition should ideally look similar to how the conversion of the The only problematic part I see is handling of systems which don't have Go installed, but that shouldn't be too hard if we just keep the python.d modules around and compute the list of which ones to not run during the build (so for systems without Go, the Python code continues to be used). |
@ktsaou understood. Here is another suggestion: We are not in a hurry with replacing python modules with go. It's very nice and all but not high priority. I suggest to stick to new modules. As you all know we have a veeery long list modules to implement. We will:
We will wait for Migration process is to vague for now, i suggest to postpone with it. I see no reason to hurry with it. All overlapping modules will be disabled by default. |
|
Don't worry. They will be tested by community. I am 100% sure a lot of (advanced) users will switch to go version. |
Basically it's one way - multi job
We don't need universal config, we need universal output format. Example:
We don't need one configuration file for all plugins, because if we have 1 config file we have 2 options:
That is how i see It has input plugins ( And EDIT:
Ok, this is still a problem when we have another input source (ex. consul, not file) 😢 |
As dicussed this morning, the first step is clear, we will include go.d plugin with the modules common with python disabled by default. We also discussed the introduction of the central configuration as a breaking change, but we agreed that we have a more general issue with breaking changes, that doesn't make them feasible in the short term: We would first need to ensure that we have a communication channel that guarantees we reach the vast majority of our user base. Without any such guarantee, breaking changes are off the table. We will continue the discussion on the next step for the go.d plugin after we have the data from the document, but the discussion on the comm. channell and breaking changes will proceed independently. |
Summary
I see we have golang orchestator.
It lives in it's own repo. We need to find a way to integrate it to
netdata
.@paulfantom said we have 3 options how to do it.
The text was updated successfully, but these errors were encountered: