Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

[RFC] Dynamic Documentation - #1308

Merged
mattdurham merged 11 commits into
dev.dynamic_configurationfrom
doc_and_settings
Feb 3, 2022
Merged

mattdurham merged 11 commits into
dev.dynamic_configurationfrom
doc_and_settings

Conversation

@mattdurham

@mattdurham mattdurham commented Jan 24, 2022

Copy link
Copy Markdown
Contributor

This covers only the documentation which broadly defines what happens, and the feature flag itself.

This is to address issues #1121, #869, and #868.

The goal is to

  • Allow the loading of all configuration files locally and remotely from a variety of sources.
  • Allow the templating of configuration files from a variety of sources, for instance pull secrets from Consul/Vault other sources
  • Allow the configuration file itself to be broken down into logical sections that are recombined in a set order.

The major mechanism it will be using to do this is by a custom fork of the gomplate tool, that allows one to embed it has a library.

@mattdurham mattdurham changed the title Documentation and feature flag support. Part 1 of many. [RFC] Dynamic Documentation Jan 24, 2022
@mattdurham

Copy link
Copy Markdown
Contributor Author

Requesting a review of the concept, more so than the actual code, since it is all just stubs in this PR.

@rfratto

rfratto commented Jan 24, 2022

Copy link
Copy Markdown
Contributor

Is there an example folder/set of configs that uses this? From the docs alone I'm having a hard time envisioning how this ties together.

@mattdurham

Copy link
Copy Markdown
Contributor Author

I will translate some unit tests into a structure that helps lay it out.

@mattdurham
mattdurham requested a review from gaantunes as a code owner January 27, 2022 21:46
@mattdurham

mattdurham commented Jan 28, 2022

Copy link
Copy Markdown
Contributor Author

Uploaded some documentation, all these are legit examples I did with my fork with dynamic configuration. Should give a better overview, there are a lot more I want to add but didn't want to spend forever on the examples. Its much easier to view if you download or look at the repo and not the diff.

@rfratto @rlankfo @tpaschalis

@rlankfo rlankfo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me for the most part, I like the cookbook style recipes. The naming conventions proposed seem a bit wonky to me though vs just importing all files in a directory for example.

Comment on lines +72 to +118
### Agent


Agent template is the standard agent configuration file in its entirety. It is defined by the pattern `agent-*.yml`. Only
one file is supported. This is processed first then any subsequent configurations found REPLACE the values here, it is
not additive.

Reference {{< relref "./" >}})

### Server

Server is defined using the pattern `server-*.yml`, only ONE server file is supported.

Reference {{< relref "./server-config.md" >}})


### Metrics

Metrics are defined using the pattern `metrics-*.yml`, only ONE metrics file is supported.

Reference {{< relref "./metrics-config.md" >}})

### Metric Instances

Metric Instances are defined using the pattern `metrics_instances-*.yml`.

Reference {{< relref "./metrics-config.md#metrics_instance_config" >}}) in the metrics instance


### Integrations

Integrations are defined using the pattern `integrations-*.yml`, these support more than one file, and multiple
integrations can be defined in a file. Do not assume any order of loading for integrations.

Reference {{< relref "./integrations/" >}})

### Traces

Traces are defined using the pattern `traces-*.yml`. This supports one file.

Reference {{< relref "./traces-config.md" >}})

### Logs

Logs are defined using the pattern `logs-*.yml`. This supports on file.

Reference {{< relref "./logs-config.md" >}})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This naming convention seems foreign to me -- I haven't seen other projects that work this way. Usually projects with conf.d style configurations will have a main config file (say an agent.yaml in our case) and then a config directory (like conf.d/ or agent.d/) where all *.conf or *.yaml files are in the directory are imported. Would something like this be possible instead of relying on naming prefixes?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's definitely possible, we would need to run all possible config types loaded on each file to see what it actually contains. They would be in memory at that point so the cost should be limited.

Comment thread docs/configuration/dynamic-config.md Outdated

```yaml
template_paths:
- "file:///etc/grafana/01_assets"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is the file:// scheme required here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change this here in the template_paths and datasources to default to file:// if none specified BUT datasources embedded in templates would still need need file:// and that seems inconsistent.


## Agent

Dynamic Configuration will find the first file matching pattern `agent-*.yml` and load that as the base. You can only have

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is -config.file no longer required with -dynamic-config? I'm not a fan of the naming prefixes and to me it makes more sense to pass the main config file to -config.file and have a -config.directory flag to import additional *.yaml files. (or configure this directory in the main config).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you are using dynamic configuration then -config-file points to the config file that handles the dynamic configuration, basically a list of folders to scan and any datasources you want to define. We could have -config.directory but you would either need to allow an array of them and also additional flags to specify datasources.

You also do not need to specify an agent-*.yml at all, only import the parts you need.

@rlankfo rlankfo Feb 1, 2022

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I see. IMO overriding the -config.file flag seems strange -- could a dynamic config block be included in the main agent config (what we're loading as agent-*.yml according to the proposed design) ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The dynamic config block tells the system where to find the agent-*.yml if we didn't want to reuse -config.file then a new flag could be added. I resued it for simplicity but if it makes it clearer then that's worth it. The dynamic config tells the system where to load the agent-*.yml so it needs to be added first.

Example /etc/grafana/dynamic-config.yml

template_paths:
  - "file:///etc/grafana/config"

The directory /etc/grafana/config has one file agent-1.yml.

Running ./agent -config.file=/etc/grafana/dynamic-config.yml -enable-features=dynamic-config,integrations-next will

  1. Load the configuration at /etc/grafana/dynamic-config.yml
  2. Search the directory at /etc/grafana/config
  3. Find the agent-1.yml
  4. Unmarshal the config and start the agent

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thinking is that it makes more sense to do the following:

  1. Load the agent.yaml config by passing it to -config.file. This would contain the contents of agent-*.yml as well as the contents of dynamic-config.yaml
  2. If the dynamic-config feature is enabled, parse the template paths.

This seems more "conventional" to me. It would mean we don't need a separate config when using dynamic config, and we don't have to discover the base agent config file. I may be missing something here, but does this seem sane to you?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thought is you will want to have a base agent config file that itself will be templated/re-used. The benefit of having them separate is allowing you to configure a fleet of agent instances.

If you have a dozen agent instances running and want to have a base agent that has organization defaults (endpoints, username, password, agent metrics enabled), then you can have a folder with just your agent-1.yml and in the dynamic configuration, template_paths you have the directory where your base agent-1.yml resides then the individual instances would have different directories they load the specific details of what they want to scrape/observe. The dynamic-configuration template_paths directories could even be templated with environment vars.

template_paths:
  - "s3://agent_configs/base" # contains agent-1.yml
  - "s3://agent_configs/{{agent_purpose}} # contains specific overrides for this agents purpose
  - "s3://agent_configs/{{hostname}} # contains specific overrides for this host

If you needed to globally update a value or setting you could do it in the base and when the reload timer (as of yet undiscussed) triggered it would propagate.

This might be a use case that is not useful or I am overcomplicating it =)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why can't the base still be templated or re-used if you combine the dynamic config? I think you'd still be able to accomplish what you've described here (e.g. env vars in the template_paths section of the agent.yml) if you combine the dynamic config with the base config. It does sound a bit overcomplicated to me 😅

Comment on lines +7 to +8
* Loading from multiple files
* Using templates and datasources

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these features going to be tightly coupled? e.g. will users be able to make use of multiple config files w/o enabling the dynamic config feature that parses the gomplate templates? In my mind these seem like they should be separate.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The templating is optional, if not needed inside the config files then you don't include the template markup. I do think it is integral to the feature though, ie if they were separate PRs to keep the code review easier that's fine but releasing together is important.

@tpaschalis

tpaschalis commented Feb 1, 2022

Copy link
Copy Markdown
Contributor

Nice work man! Thanks for providing nice the cookbook, it was great to see how we envision that it would work in action! 🚀
And this looks something that's going to really help with maintaining complicated configs.

Some thoughts:

Dynamic Configuration will find the first file matching pattern agent-*.yml and load that as the base. You can only have one agent template.

First off, it sounded a little weird that we'll only accept the first result of the wildcard (I suppose in lexicographic order) and silently discard the rest. ​I'm not sure which is the best solution since we have both files that are additive and ones that are not. Have we given any thought to erroring out when there are more than one matching files, or being able to add a matcher for what's in *?

Secondly, do we explicitly fill in with every available field and add empty values as default? Is that how for example 01_Basics/02_assets/final.yml came to be larger than its inputs? Where do we get these default values from?

Finally, nice one with forking gomplate to query EC2; much simpler than I thought it would be! In order to be able to query URL-based datasources (eg. GCP Buckets or Azure Blobs) with authentication, will we need something similar?

@mattdurham

Copy link
Copy Markdown
Contributor Author

@tpaschalis in regards to the final.yaml, it is the result of our unmarshaling of the config which includes all the fields and defaults. It will error out if it finds multiple files that match: agent, server, metrics, traces, or logs. Will update the documentation to reflect that. The cloud provider queries will use the default auth which is generally environment variables or profiles (AWs/GCP, not used Azure much so unsure).

mattdurham and others added 2 commits February 1, 2022 10:23
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

@rfratto rfratto left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I'm supportive of exploring the general idea of using templates to support dynamic configuration.

I have some high-level concerns about relying on templates; I'm worried it might be really hard to debug problems and add a lot of overhead to the mental map you build of your configs. That being said, it's a good idea to start with this anyway. It's easier to implement than the alternatives I can think of, and that'll be really useful to collect feedback and use cases. I'd also love to be wrong about my concerns and see this graduate out of a feature flag :)

My only "big" concern is making sure that you can have more than one file per specific instantiation of an multiplexed integration (i.e., one file for mysql_exporter against server-a, another for server-b). Splitting up integrations across multiple files aligns with the CRD concept from the operator, and also makes it easier to write instructions that users can copy and paste into new files.

(I have some language / styling nits that I've left out of the review, I don't think they're important right now as an RFC)

Comment thread docs/configuration/dynamic-config.md Outdated
Comment thread docs/configuration/dynamic-config.md Outdated
@@ -0,0 +1,118 @@
# Dynamic Configuration - BETA

**This is BETA and subject to change at anytime, feedback is much appreciated**

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe give a link to issues/discussions to point people where to share feedback? This will be rendered on the docs site so it might not be immediately clear where people should be sharing their experiences

Comment thread docs/configuration/dynamic-config.md Outdated
Comment thread docs/configuration/dynamic-config.md Outdated
Comment thread docs/configuration/dynamic-config.md Outdated
Comment thread docs/cookbook/dynamic-configuration/01_Basics/03_Integrations.md
@@ -0,0 +1,253 @@
server:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we manually trim out zero values from the final.yml files so it's not overwhelming to readers? (even if that means it's not synced with the actual output of /-/config anymore)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I struggled with this, partly due to laziness and partly since I wanted to match exactly what agentctl dryrun outputs. I tried to call out what should be in the final. I may see if I can add an option to dryrun to compare a default config with the generated and only output the differences.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 might be a good opportunity for us to add missing omitempty all over the place (though it doesn't help with all our dependencies that don't have it)

configs:
- name: default
{{ range slice "apple" "banana" "pear" }}
- name: {{ . }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I think we should make it clear what happens if you have metrics instances defined in the base config file and also in templates. (IMO, it should be valid to have both and just append the arrays, if that's not already what happens)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is appended, but I will add more verbiage on what is additive vs what is replaced.

Comment thread docs/cookbook/dynamic-configuration/02_Templates/01_Looping.md
Comment thread docs/cookbook/dynamic-configuration/03_Advanced_Datasources/01_config.yml Outdated
@mattdurham

Copy link
Copy Markdown
Contributor Author

I feel the only large outstanding concern is whether to use file-names or have a header on each file to determine the config type it should load.

Filenames would be the existing agent-*.yml,
Header would be adding the "root" element back into the config, so

integrations:
  redis_exporter_configs:
  - redis_addr: localhost

then scan the top element to find which configuration to load. (Or at least something similar) The reason I went with filenames is that it enforces figuring out what the file contains when looking in a directory. Else people can name them config1.yml, config2.yml etc. Granted they still can name them in a way that makes it easy to understand in the header case.

Thoughts? @rfratto @rlankfo

@mattdurham

Copy link
Copy Markdown
Contributor Author

@rfratto thoughts on removing the server loading and embedding it into the dynamic configuration block. That way it is NOT reloaded.

@rfratto

rfratto commented Feb 2, 2022

Copy link
Copy Markdown
Contributor

I feel the only large outstanding concern is whether to use file-names or have a header on each file to determine the config type it should load.

I'm not opposed to the header so that all files have the same schema, but FWIW my suggestion was instead of

template_paths:
   - "/etc/grafana/01_assets" 

to have a user explicitly specify:

base_template_path: /etc/grafana/01_assets/agent-1.yml 
metrics_instance_template_paths: 
  - /etc/grafana/01_assets/metrics-instance-*.yml 
integration_template_paths: 
  - /etc/grafana/01_assets/integrations-*.yml 
traces_template_path: /etc/grafana/01_assets/traces.yml
logs_template_path: /etc/grafana/01_assets/logs.yml

That way they're in control of the naming and folder structure conventions, and we still know what the contents of the files are expected to be without having to add the header.

@mattdurham

Copy link
Copy Markdown
Contributor Author

It's a bit more config but solves the singleton problem and allows them to override the pattern. Let me prototype the changes and see how it feels.

@mattdurham

mattdurham commented Feb 3, 2022

Copy link
Copy Markdown
Contributor Author

Prototype this and handling some of the nonfile providers is difficult as a single string, so would need to be the below, which feels verbose.

base_template_path:
  url: s3:///mybucket/
  filter: agent-*.yml

Alternative would be to have the template paths as is BUT allow the override of filter, so by default would use the ones listed above but allow override for each filter.

template_paths:
   - "/etc/grafana/01_assets" 
integrations_filter:  myspecific_filter_integrations-*.yml

@mattdurham
mattdurham enabled auto-merge (squash) February 3, 2022 19:10
@mattdurham
mattdurham merged commit d74fe82 into dev.dynamic_configuration Feb 3, 2022
@mattdurham
mattdurham deleted the doc_and_settings branch February 3, 2022 19:11
rfratto added a commit that referenced this pull request Mar 1, 2022
* Merge main -> dev.dynamic_configuration (#1270)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub integrations.

* Lint

* Docs for cadvisor config

* Update changelog

* Update pkg/integrations/stub_integration.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Reorder changelog

* Instance key clarity

* Inclusive naming

* Finish name changes

Keep default disable metric list in sync with upstream

Idiomatic golang

* Hardcode disabled metrics for cadvisor

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Remove log-level flag from systemd unit file (#1177)

* Upgrade to OTel v0.40.0 (#1176)

* Upgrade to OTel v0.40.0

* Changelog

* Add factories check

* go mod tidy

* config/features: create package to standardize experimental features (#1170)

* config/features: create package to standardize experiemental features

This commit introduces a new package, pkg/config/features, which allows
defining a set of features and validating whether flags associated with
those features are allowed to be set.

Closes #1163

* update documentation

(also s/enabled-features/enable-features)

* Fix typo

* Update pkg/config/features/features.go

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Revert "Merge main into dev.multiple-integrations (#1184)" (#1189)

This reverts commit ad76ec54f9a781fc83d3e7001808c887f37833ff.

* [dev.multiple-integrations] Revert breaking changes to existing integrations (#1191)

* revert breaking changes to integrations v1

This commit reverts #1062 in favor of making breaking changes directly
in integrations-next instead. The part of #1181 to remove
`wal_truncate_frequency` has also been reverted.

As part of this change, the enabled field is removed from the v2
common metrics configs, and v2 integrations can no longer be disabled.
v2 integrations can only be disabled by removing them from the YAML.

* integrations/v2: remove stale reference to ErrDisabled

(fix typo too)

* integrations/v2: bring in common config decoupling

* [dev.multiple-integrations] Introduce autoscraper (#1195)

* pkg/integrations/v2: introduce self-scraping

* linting

* [dev.multiple-integrations] Multiple instances of integrations (#1196)

* multiple instances of integrations

opt in relevant v1 integrations into supporting multiple instances

* shims should check for instance key override

* Document integrations-next (#1197)

* document integrations-next

* remove json tags since they make markdown unhappy

* changelog

* s/Run/RunIntegration

* remove stale comment about integrations.controller purpose

* create dedicated run method for instanceScraper

* s/expoter/exporter/g

* Document why an autoscrape.Scraper manages a set of per-instance scrapers

* spell out prerequisite instead of pre-req

* use go.uber.org/atomic to make the code a little easier to follow

* remove started callback for running integration

* use smaller interface for autoscrape

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Fix panic when using 'stdout' in automatic logging (#1233)

* integrations-next: fix bug where v2 integrations were not being strictly unmarshaled (#1235)

* Remove jsonnet vendor folders (#1222)

* remove jsonnet vendor

This adds all vendor folders into .gitignore and removes cached vendor
files from the repository.

Closes #1221

* Update scripts and instructions for jsonnet vendor removal

* `make example-dashboards` will now also run `jb install`
* k3d environment instructions now include `jb install`
* smoke-test.bash will now run `jb install` prior to `tk apply`

* Fix link to k3d example in DEVELOPERS.md (#1242)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Fix node_exporter upgrade docs (#1239)

* Fix panic in automatic logging with stdout backend (#1243)

* pkg/util: support custom yaml.Unmarshaler implementations for util.UnmarshalYAMLMerged (#1244)

It's common for config types to have implement yaml.Unmarshaler for:

* Applying defaults
* Applying extra logic post-unmarshal

If these config types were unmarshaled through util.UnmarshalYAMLMerged,
the yaml.Unmarshaler implementation would never complete successfully,
preventing the post-unmarshal logic from running.

This issue was introduced in #1192, but went unnoticed until #1228
implemented yaml.Unmarshaler to perform field migrations. #1240 reported
the issue.

This commit fixes the bug by performing a second non-strict unmarshal to
ensure that all input values unmarshal successfully, with the exception
of unmarshal errors unrelated to unrecognized field names.

This is hacky, but it's worthwhile noting that util.UnmarshalYAMLMerged
is a temporary workaround needed for the integrations-next migration,
and will eventually be removed.

* Update k3d example grafana/grafonnet-lib version (#1246)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Create an e2e framework with support for running tests against k8s (#1234)

* e2e: create an e2e framework with support for running tests against a k3d cluster

* add new E2E drone job

* E2E tests should pass when doing a release

* sign drone.yml again

* move e2e lint to different step that has golangci-lint installed

* upgrade golangci-lint and go for e2e test

* e2e: add gcc

* E2E: install build-essential to get a working full gcc env

* :(

* e2e: support running from inside of docker

* fix lint error

* address review feedback

* Operator: fix bug where /-/ready and /-/healthy always returned 404 (#1252)

* operator: fix bug where /-/ready and /-/healthy always returned 404

controller-runtime must have at least one ready/healthy check for the endpoints to exist

* fix lint error, use healthz.Ping

* Make scraping-svc use the new `metrics:` key (#1259)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* update prometheus dependency (#1260)

* corrected typo (#1265)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags (#1264)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Use :main tag for images in smoke test

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Set IMAGE_BRANCH_TAG env var in drone and actions pipelines

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove quotes from Makefile variable

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove force_release action

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* prepare for v0.22.0 release (#1266)

* prepare for v0.22.0 release

* remove E2E pipeline

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>
Co-authored-by: Paschalis Tsilias <tpaschalis@users.noreply.github.com>
Co-authored-by: Patrick Koenig <pkoenig10@gmail.com>
Co-authored-by: DataPoints <langer.markus@gmail.com>

* Main merge dynamic (#1305)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub integrations.

* Lint

* Docs for cadvisor config

* Update changelog

* Update pkg/integrations/stub_integration.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Reorder changelog

* Instance key clarity

* Inclusive naming

* Finish name changes

Keep default disable metric list in sync with upstream

Idiomatic golang

* Hardcode disabled metrics for cadvisor

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Remove log-level flag from systemd unit file (#1177)

* Upgrade to OTel v0.40.0 (#1176)

* Upgrade to OTel v0.40.0

* Changelog

* Add factories check

* go mod tidy

* config/features: create package to standardize experimental features (#1170)

* config/features: create package to standardize experiemental features

This commit introduces a new package, pkg/config/features, which allows
defining a set of features and validating whether flags associated with
those features are allowed to be set.

Closes #1163

* update documentation

(also s/enabled-features/enable-features)

* Fix typo

* Update pkg/config/features/features.go

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Revert "Merge main into dev.multiple-integrations (#1184)" (#1189)

This reverts commit ad76ec54f9a781fc83d3e7001808c887f37833ff.

* [dev.multiple-integrations] Revert breaking changes to existing integrations (#1191)

* revert breaking changes to integrations v1

This commit reverts #1062 in favor of making breaking changes directly
in integrations-next instead. The part of #1181 to remove
`wal_truncate_frequency` has also been reverted.

As part of this change, the enabled field is removed from the v2
common metrics configs, and v2 integrations can no longer be disabled.
v2 integrations can only be disabled by removing them from the YAML.

* integrations/v2: remove stale reference to ErrDisabled

(fix typo too)

* integrations/v2: bring in common config decoupling

* [dev.multiple-integrations] Introduce autoscraper (#1195)

* pkg/integrations/v2: introduce self-scraping

* linting

* [dev.multiple-integrations] Multiple instances of integrations (#1196)

* multiple instances of integrations

opt in relevant v1 integrations into supporting multiple instances

* shims should check for instance key override

* Document integrations-next (#1197)

* document integrations-next

* remove json tags since they make markdown unhappy

* changelog

* s/Run/RunIntegration

* remove stale comment about integrations.controller purpose

* create dedicated run method for instanceScraper

* s/expoter/exporter/g

* Document why an autoscrape.Scraper manages a set of per-instance scrapers

* spell out prerequisite instead of pre-req

* use go.uber.org/atomic to make the code a little easier to follow

* remove started callback for running integration

* use smaller interface for autoscrape

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Fix panic when using 'stdout' in automatic logging (#1233)

* integrations-next: fix bug where v2 integrations were not being strictly unmarshaled (#1235)

* Remove jsonnet vendor folders (#1222)

* remove jsonnet vendor

This adds all vendor folders into .gitignore and removes cached vendor
files from the repository.

Closes #1221

* Update scripts and instructions for jsonnet vendor removal

* `make example-dashboards` will now also run `jb install`
* k3d environment instructions now include `jb install`
* smoke-test.bash will now run `jb install` prior to `tk apply`

* Fix link to k3d example in DEVELOPERS.md (#1242)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Fix node_exporter upgrade docs (#1239)

* Fix panic in automatic logging with stdout backend (#1243)

* pkg/util: support custom yaml.Unmarshaler implementations for util.UnmarshalYAMLMerged (#1244)

It's common for config types to have implement yaml.Unmarshaler for:

* Applying defaults
* Applying extra logic post-unmarshal

If these config types were unmarshaled through util.UnmarshalYAMLMerged,
the yaml.Unmarshaler implementation would never complete successfully,
preventing the post-unmarshal logic from running.

This issue was introduced in #1192, but went unnoticed until #1228
implemented yaml.Unmarshaler to perform field migrations. #1240 reported
the issue.

This commit fixes the bug by performing a second non-strict unmarshal to
ensure that all input values unmarshal successfully, with the exception
of unmarshal errors unrelated to unrecognized field names.

This is hacky, but it's worthwhile noting that util.UnmarshalYAMLMerged
is a temporary workaround needed for the integrations-next migration,
and will eventually be removed.

* Update k3d example grafana/grafonnet-lib version (#1246)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Create an e2e framework with support for running tests against k8s (#1234)

* e2e: create an e2e framework with support for running tests against a k3d cluster

* add new E2E drone job

* E2E tests should pass when doing a release

* sign drone.yml again

* move e2e lint to different step that has golangci-lint installed

* upgrade golangci-lint and go for e2e test

* e2e: add gcc

* E2E: install build-essential to get a working full gcc env

* :(

* e2e: support running from inside of docker

* fix lint error

* address review feedback

* Operator: fix bug where /-/ready and /-/healthy always returned 404 (#1252)

* operator: fix bug where /-/ready and /-/healthy always returned 404

controller-runtime must have at least one ready/healthy check for the endpoints to exist

* fix lint error, use healthz.Ping

* Make scraping-svc use the new `metrics:` key (#1259)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* update prometheus dependency (#1260)

* corrected typo (#1265)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags (#1264)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Use :main tag for images in smoke test

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Set IMAGE_BRANCH_TAG env var in drone and actions pipelines

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove quotes from Makefile variable

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove force_release action

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* prepare for v0.22.0 release (#1266)

* prepare for v0.22.0 release

* remove E2E pipeline

* Add basic testing framework for operator (#1268)

* remove dedicated go.mod for e2e/

* move e2e/k8s to pkg/util/k8s

* Migrate operator tests to pkg/util/k8s

* remove dedicated e2e tests

* allow skipping TestCluster in pkg/util/k8s

* remove e2e/

* fix bad merge

* fix order of make env args for windows

* actually declare referenced docker volume

* introduce pkg/util/subset for asserting subset of objects

* refactor operator so it's testable

* define basic integration test for operator

* fix lint errors

* fix invalid address in operator test config

* Update release-note.md (#1267)

* Set scrape User-Agent header during init (#1274)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Upgrade to Go 1.17 (#1278)

* Upgrade to 1.17.6 in go.mod and Dockerfiles

* Update CHANGELOG.md to mention the update

* Update Go version in drone/actions pipelines

* Update go.mod, go.sum files via

* Re-sign drone.yml

* Remove leading newline causing drone build to fail

* Bump golangci-lint image to a version using Go 1.17

* Re-attempt to solve linter issue with new golangci-lint image

* Remove suffix of exclude rules

* Clean previous Go version before unpacking Go 1.17

* Also clean up previous Go versions in other steps

* fix typo (#1284)

* Use custom Go version in agent-operator Dockerfile (#1286)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* pkg/operator: refactor resource hierarchy discovery (#1271)

* pkg/operator: refactor resource hierarchy discovery

This commit moves common logic related to discovering the resource
hierarchy to pkg/operator/hierarchy. This new package requires less
boilerplate, which the reconciler is updated to take advantage of.

* remove unused code

* test construction of resource hierarchy

* add missing build constraints

* small extra cleanup to use pointer package

* review feedback

* update agent-build-image for go 1.17 (#1287)

(also use a consistent base image tag instead of latest)

* Skip non-ready entries when listing instances (#1289)

* Skip non-ready instances in LoadInstances()

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Add changelog entry

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix panic in prom_sd_processor when address is empty (#1279)

* Fix panic in prom_sd_processor when address is empty

* Fix panic in prom_sd_processor when address is empty

* Fix docs

* Add test case

* Lint

* Move to unreleased

* Operator: generate proxy_url for remote_write (#1298)

* operator: generate proxy_url for remote_write

* fix weird indentation in test

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>
Co-authored-by: Paschalis Tsilias <tpaschalis@users.noreply.github.com>
Co-authored-by: Patrick Koenig <pkoenig10@gmail.com>
Co-authored-by: DataPoints <langer.markus@gmail.com>
Co-authored-by: Alex <52292902+alexrudd2@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Main merge dynamic (#1307)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub integrations.

* Lint

* Docs for cadvisor config

* Update changelog

* Update pkg/integrations/stub_integration.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Reorder changelog

* Instance key clarity

* Inclusive naming

* Finish name changes

Keep default disable metric list in sync with upstream

Idiomatic golang

* Hardcode disabled metrics for cadvisor

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Remove log-level flag from systemd unit file (#1177)

* Upgrade to OTel v0.40.0 (#1176)

* Upgrade to OTel v0.40.0

* Changelog

* Add factories check

* go mod tidy

* config/features: create package to standardize experimental features (#1170)

* config/features: create package to standardize experiemental features

This commit introduces a new package, pkg/config/features, which allows
defining a set of features and validating whether flags associated with
those features are allowed to be set.

Closes #1163

* update documentation

(also s/enabled-features/enable-features)

* Fix typo

* Update pkg/config/features/features.go

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Revert "Merge main into dev.multiple-integrations (#1184)" (#1189)

This reverts commit ad76ec54f9a781fc83d3e7001808c887f37833ff.

* [dev.multiple-integrations] Revert breaking changes to existing integrations (#1191)

* revert breaking changes to integrations v1

This commit reverts #1062 in favor of making breaking changes directly
in integrations-next instead. The part of #1181 to remove
`wal_truncate_frequency` has also been reverted.

As part of this change, the enabled field is removed from the v2
common metrics configs, and v2 integrations can no longer be disabled.
v2 integrations can only be disabled by removing them from the YAML.

* integrations/v2: remove stale reference to ErrDisabled

(fix typo too)

* integrations/v2: bring in common config decoupling

* [dev.multiple-integrations] Introduce autoscraper (#1195)

* pkg/integrations/v2: introduce self-scraping

* linting

* [dev.multiple-integrations] Multiple instances of integrations (#1196)

* multiple instances of integrations

opt in relevant v1 integrations into supporting multiple instances

* shims should check for instance key override

* Document integrations-next (#1197)

* document integrations-next

* remove json tags since they make markdown unhappy

* changelog

* s/Run/RunIntegration

* remove stale comment about integrations.controller purpose

* create dedicated run method for instanceScraper

* s/expoter/exporter/g

* Document why an autoscrape.Scraper manages a set of per-instance scrapers

* spell out prerequisite instead of pre-req

* use go.uber.org/atomic to make the code a little easier to follow

* remove started callback for running integration

* use smaller interface for autoscrape

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Fix panic when using 'stdout' in automatic logging (#1233)

* integrations-next: fix bug where v2 integrations were not being strictly unmarshaled (#1235)

* Remove jsonnet vendor folders (#1222)

* remove jsonnet vendor

This adds all vendor folders into .gitignore and removes cached vendor
files from the repository.

Closes #1221

* Update scripts and instructions for jsonnet vendor removal

* `make example-dashboards` will now also run `jb install`
* k3d environment instructions now include `jb install`
* smoke-test.bash will now run `jb install` prior to `tk apply`

* Fix link to k3d example in DEVELOPERS.md (#1242)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Fix node_exporter upgrade docs (#1239)

* Fix panic in automatic logging with stdout backend (#1243)

* pkg/util: support custom yaml.Unmarshaler implementations for util.UnmarshalYAMLMerged (#1244)

It's common for config types to have implement yaml.Unmarshaler for:

* Applying defaults
* Applying extra logic post-unmarshal

If these config types were unmarshaled through util.UnmarshalYAMLMerged,
the yaml.Unmarshaler implementation would never complete successfully,
preventing the post-unmarshal logic from running.

This issue was introduced in #1192, but went unnoticed until #1228
implemented yaml.Unmarshaler to perform field migrations. #1240 reported
the issue.

This commit fixes the bug by performing a second non-strict unmarshal to
ensure that all input values unmarshal successfully, with the exception
of unmarshal errors unrelated to unrecognized field names.

This is hacky, but it's worthwhile noting that util.UnmarshalYAMLMerged
is a temporary workaround needed for the integrations-next migration,
and will eventually be removed.

* Update k3d example grafana/grafonnet-lib version (#1246)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Create an e2e framework with support for running tests against k8s (#1234)

* e2e: create an e2e framework with support for running tests against a k3d cluster

* add new E2E drone job

* E2E tests should pass when doing a release

* sign drone.yml again

* move e2e lint to different step that has golangci-lint installed

* upgrade golangci-lint and go for e2e test

* e2e: add gcc

* E2E: install build-essential to get a working full gcc env

* :(

* e2e: support running from inside of docker

* fix lint error

* address review feedback

* Operator: fix bug where /-/ready and /-/healthy always returned 404 (#1252)

* operator: fix bug where /-/ready and /-/healthy always returned 404

controller-runtime must have at least one ready/healthy check for the endpoints to exist

* fix lint error, use healthz.Ping

* Make scraping-svc use the new `metrics:` key (#1259)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* update prometheus dependency (#1260)

* corrected typo (#1265)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags (#1264)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Use :main tag for images in smoke test

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Set IMAGE_BRANCH_TAG env var in drone and actions pipelines

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove quotes from Makefile variable

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove force_release action

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* prepare for v0.22.0 release (#1266)

* prepare for v0.22.0 release

* remove E2E pipeline

* Add basic testing framework for operator (#1268)

* remove dedicated go.mod for e2e/

* move e2e/k8s to pkg/util/k8s

* Migrate operator tests to pkg/util/k8s

* remove dedicated e2e tests

* allow skipping TestCluster in pkg/util/k8s

* remove e2e/

* fix bad merge

* fix order of make env args for windows

* actually declare referenced docker volume

* introduce pkg/util/subset for asserting subset of objects

* refactor operator so it's testable

* define basic integration test for operator

* fix lint errors

* fix invalid address in operator test config

* Update release-note.md (#1267)

* Set scrape User-Agent header during init (#1274)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Upgrade to Go 1.17 (#1278)

* Upgrade to 1.17.6 in go.mod and Dockerfiles

* Update CHANGELOG.md to mention the update

* Update Go version in drone/actions pipelines

* Update go.mod, go.sum files via

* Re-sign drone.yml

* Remove leading newline causing drone build to fail

* Bump golangci-lint image to a version using Go 1.17

* Re-attempt to solve linter issue with new golangci-lint image

* Remove suffix of exclude rules

* Clean previous Go version before unpacking Go 1.17

* Also clean up previous Go versions in other steps

* fix typo (#1284)

* Use custom Go version in agent-operator Dockerfile (#1286)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* pkg/operator: refactor resource hierarchy discovery (#1271)

* pkg/operator: refactor resource hierarchy discovery

This commit moves common logic related to discovering the resource
hierarchy to pkg/operator/hierarchy. This new package requires less
boilerplate, which the reconciler is updated to take advantage of.

* remove unused code

* test construction of resource hierarchy

* add missing build constraints

* small extra cleanup to use pointer package

* review feedback

* update agent-build-image for go 1.17 (#1287)

(also use a consistent base image tag instead of latest)

* Skip non-ready entries when listing instances (#1289)

* Skip non-ready instances in LoadInstances()

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Add changelog entry

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix panic in prom_sd_processor when address is empty (#1279)

* Fix panic in prom_sd_processor when address is empty

* Fix panic in prom_sd_processor when address is empty

* Fix docs

* Add test case

* Lint

* Move to unreleased

* Operator: generate proxy_url for remote_write (#1298)

* operator: generate proxy_url for remote_write

* fix weird indentation in test

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>
Co-authored-by: Paschalis Tsilias <tpaschalis@users.noreply.github.com>
Co-authored-by: Patrick Koenig <pkoenig10@gmail.com>
Co-authored-by: DataPoints <langer.markus@gmail.com>
Co-authored-by: Alex <52292902+alexrudd2@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* [RFC] Dynamic Documentation (#1308)

* Documentation and feature flag support. Part 1 of many.

* Fix linting

* Documentation

* More documentation

* MOAR documentation

* Update overall readme

* fix typo

* Update docs/configuration/dynamic-config.md

Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* fix typos and add additional comments

* Feedback from PR

* Allow overrides of documentation

Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Code to support dynamic configuration. (#1360)

* Code to support dynamic configuration.

* Fix linting errors

* Fix issue with examples and add template parse

* Fix windows issues

* Simplify tests

* Respond to PR feedback

* Simplify tests and remove setting default

* Move to unexported configshim

* Export configshims members for testing

* Simplify singleton checking

* Add error around expand var

* sever -> server

* Better error code

* Fix error when unmarshalling yaml which allowed unexporting fields

* Switch to using require.noerror instead of assert.

* Split tests into two sections and remove redundant tests

* Verbiage cleanup and var renaming

* PR feedback

* PR feedback

* Move singleton check to the controller instead

* Cleanup the read file code to MUCH more compact code.

* Remove EOF

* PR feedback from session with rfratto, lots of changes to simplify the code

* Fix misc feedback from PR

* Dyn main merge (#1423)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub in…
rfratto added a commit that referenced this pull request Mar 15, 2022
…#1500)

* RFC-0001: Add status to RFC (#1391)

* rfc-0001: add rules for when RFC PRs should be merged

* use status field instead of merge to indicating state

* Parametrize logs DaemonSet K8s manifests (#1420)

* Parametrize logs daemonset K8s manifests
* Update CHANGELOG.md

* Extend linting configuration file (#1421)

* Add depguard linter to reject packages we tend to avoid
* Replace golint with revive, since golint is deprecated
* Remove interfacer, which is deprecated with no replacement
* Add makezero linter to detect misuse of make with append
* Add tenv to prefer t.Setenv over os.Setenv in tests
* Add whitespace to report unnecessary blank lines
* Ignore test files for errcheck

In addition to the above, the following changes were made:

* Remove settings that just re-set default values, instead pointing to the website to retrieve defaults.
* Simplify the errcheck rule to only include functions we actually need to ignore.

* update smoke alerts (#1432)

* update smoke alerts

Signed-off-by: Robbie Lankford <robert.lankford@grafana.com>

* filter pod variable with namespace

Signed-off-by: Robbie Lankford <robert.lankford@grafana.com>

* update cpu high alert duration to 1h

Signed-off-by: Robbie Lankford <robert.lankford@grafana.com>

* upgrade to loki v2.4.2 (#1422)

* upgrade to loki v2.4.2

Signed-off-by: Robbie Lankford <robert.lankford@grafana.com>

* update CHANGELOG.md

* rename cortex_ metrics to agent_dskit_

* update changelog

* cadvisor config Fixes #1281 (#1293)

* Fixes #1281

* Update pkg/integrations/cadvisor/common.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* gofmt

* Add tests for cadvisor config

* Lint

* simplify test, enhance comments, return nil on run

* Default config slices to values expected by upstream cadvisor

* Build flags to only run cadvisor tests when docker and network are present

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update install-agent-on-windows.md (#1438)

* Update install-agent-on-windows.md

add quotes to URL silent install doc

* Update install-agent-on-windows.md

* Update install-agent-on-windows.md

* Update install-agent-on-windows.md

Fix linting error

* add bump-formula-pr workflow jobs (#1382)

* add bump-formula-pr workflow jobs

Signed-off-by: Robbie Lankford <robert.lankford@grafana.com>

* Update .github/workflows/bump-formula-pr.yml

* Update .github/workflows/bump-formula-pr.yml

* Update .github/workflows/bump-formula-pr.yml

* Update .github/workflows/bump-formula-pr.yml

* Update .github/workflows/bump-formula-pr.yml

* Consulagent sd (#1439)

* add consulagent_sd

* add consulagent_sd

* Dev.dynamic configuration (#1429)

* Merge main -> dev.dynamic_configuration (#1270)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub integrations.

* Lint

* Docs for cadvisor config

* Update changelog

* Update pkg/integrations/stub_integration.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Reorder changelog

* Instance key clarity

* Inclusive naming

* Finish name changes

Keep default disable metric list in sync with upstream

Idiomatic golang

* Hardcode disabled metrics for cadvisor

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Remove log-level flag from systemd unit file (#1177)

* Upgrade to OTel v0.40.0 (#1176)

* Upgrade to OTel v0.40.0

* Changelog

* Add factories check

* go mod tidy

* config/features: create package to standardize experimental features (#1170)

* config/features: create package to standardize experiemental features

This commit introduces a new package, pkg/config/features, which allows
defining a set of features and validating whether flags associated with
those features are allowed to be set.

Closes #1163

* update documentation

(also s/enabled-features/enable-features)

* Fix typo

* Update pkg/config/features/features.go

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Revert "Merge main into dev.multiple-integrations (#1184)" (#1189)

This reverts commit ad76ec54f9a781fc83d3e7001808c887f37833ff.

* [dev.multiple-integrations] Revert breaking changes to existing integrations (#1191)

* revert breaking changes to integrations v1

This commit reverts #1062 in favor of making breaking changes directly
in integrations-next instead. The part of #1181 to remove
`wal_truncate_frequency` has also been reverted.

As part of this change, the enabled field is removed from the v2
common metrics configs, and v2 integrations can no longer be disabled.
v2 integrations can only be disabled by removing them from the YAML.

* integrations/v2: remove stale reference to ErrDisabled

(fix typo too)

* integrations/v2: bring in common config decoupling

* [dev.multiple-integrations] Introduce autoscraper (#1195)

* pkg/integrations/v2: introduce self-scraping

* linting

* [dev.multiple-integrations] Multiple instances of integrations (#1196)

* multiple instances of integrations

opt in relevant v1 integrations into supporting multiple instances

* shims should check for instance key override

* Document integrations-next (#1197)

* document integrations-next

* remove json tags since they make markdown unhappy

* changelog

* s/Run/RunIntegration

* remove stale comment about integrations.controller purpose

* create dedicated run method for instanceScraper

* s/expoter/exporter/g

* Document why an autoscrape.Scraper manages a set of per-instance scrapers

* spell out prerequisite instead of pre-req

* use go.uber.org/atomic to make the code a little easier to follow

* remove started callback for running integration

* use smaller interface for autoscrape

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Fix panic when using 'stdout' in automatic logging (#1233)

* integrations-next: fix bug where v2 integrations were not being strictly unmarshaled (#1235)

* Remove jsonnet vendor folders (#1222)

* remove jsonnet vendor

This adds all vendor folders into .gitignore and removes cached vendor
files from the repository.

Closes #1221

* Update scripts and instructions for jsonnet vendor removal

* `make example-dashboards` will now also run `jb install`
* k3d environment instructions now include `jb install`
* smoke-test.bash will now run `jb install` prior to `tk apply`

* Fix link to k3d example in DEVELOPERS.md (#1242)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Fix node_exporter upgrade docs (#1239)

* Fix panic in automatic logging with stdout backend (#1243)

* pkg/util: support custom yaml.Unmarshaler implementations for util.UnmarshalYAMLMerged (#1244)

It's common for config types to have implement yaml.Unmarshaler for:

* Applying defaults
* Applying extra logic post-unmarshal

If these config types were unmarshaled through util.UnmarshalYAMLMerged,
the yaml.Unmarshaler implementation would never complete successfully,
preventing the post-unmarshal logic from running.

This issue was introduced in #1192, but went unnoticed until #1228
implemented yaml.Unmarshaler to perform field migrations. #1240 reported
the issue.

This commit fixes the bug by performing a second non-strict unmarshal to
ensure that all input values unmarshal successfully, with the exception
of unmarshal errors unrelated to unrecognized field names.

This is hacky, but it's worthwhile noting that util.UnmarshalYAMLMerged
is a temporary workaround needed for the integrations-next migration,
and will eventually be removed.

* Update k3d example grafana/grafonnet-lib version (#1246)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Create an e2e framework with support for running tests against k8s (#1234)

* e2e: create an e2e framework with support for running tests against a k3d cluster

* add new E2E drone job

* E2E tests should pass when doing a release

* sign drone.yml again

* move e2e lint to different step that has golangci-lint installed

* upgrade golangci-lint and go for e2e test

* e2e: add gcc

* E2E: install build-essential to get a working full gcc env

* :(

* e2e: support running from inside of docker

* fix lint error

* address review feedback

* Operator: fix bug where /-/ready and /-/healthy always returned 404 (#1252)

* operator: fix bug where /-/ready and /-/healthy always returned 404

controller-runtime must have at least one ready/healthy check for the endpoints to exist

* fix lint error, use healthz.Ping

* Make scraping-svc use the new `metrics:` key (#1259)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* update prometheus dependency (#1260)

* corrected typo (#1265)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags (#1264)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Use :main tag for images in smoke test

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Set IMAGE_BRANCH_TAG env var in drone and actions pipelines

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove quotes from Makefile variable

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove force_release action

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* prepare for v0.22.0 release (#1266)

* prepare for v0.22.0 release

* remove E2E pipeline

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>
Co-authored-by: Paschalis Tsilias <tpaschalis@users.noreply.github.com>
Co-authored-by: Patrick Koenig <pkoenig10@gmail.com>
Co-authored-by: DataPoints <langer.markus@gmail.com>

* Main merge dynamic (#1305)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub integrations.

* Lint

* Docs for cadvisor config

* Update changelog

* Update pkg/integrations/stub_integration.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Reorder changelog

* Instance key clarity

* Inclusive naming

* Finish name changes

Keep default disable metric list in sync with upstream

Idiomatic golang

* Hardcode disabled metrics for cadvisor

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Remove log-level flag from systemd unit file (#1177)

* Upgrade to OTel v0.40.0 (#1176)

* Upgrade to OTel v0.40.0

* Changelog

* Add factories check

* go mod tidy

* config/features: create package to standardize experimental features (#1170)

* config/features: create package to standardize experiemental features

This commit introduces a new package, pkg/config/features, which allows
defining a set of features and validating whether flags associated with
those features are allowed to be set.

Closes #1163

* update documentation

(also s/enabled-features/enable-features)

* Fix typo

* Update pkg/config/features/features.go

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Revert "Merge main into dev.multiple-integrations (#1184)" (#1189)

This reverts commit ad76ec54f9a781fc83d3e7001808c887f37833ff.

* [dev.multiple-integrations] Revert breaking changes to existing integrations (#1191)

* revert breaking changes to integrations v1

This commit reverts #1062 in favor of making breaking changes directly
in integrations-next instead. The part of #1181 to remove
`wal_truncate_frequency` has also been reverted.

As part of this change, the enabled field is removed from the v2
common metrics configs, and v2 integrations can no longer be disabled.
v2 integrations can only be disabled by removing them from the YAML.

* integrations/v2: remove stale reference to ErrDisabled

(fix typo too)

* integrations/v2: bring in common config decoupling

* [dev.multiple-integrations] Introduce autoscraper (#1195)

* pkg/integrations/v2: introduce self-scraping

* linting

* [dev.multiple-integrations] Multiple instances of integrations (#1196)

* multiple instances of integrations

opt in relevant v1 integrations into supporting multiple instances

* shims should check for instance key override

* Document integrations-next (#1197)

* document integrations-next

* remove json tags since they make markdown unhappy

* changelog

* s/Run/RunIntegration

* remove stale comment about integrations.controller purpose

* create dedicated run method for instanceScraper

* s/expoter/exporter/g

* Document why an autoscrape.Scraper manages a set of per-instance scrapers

* spell out prerequisite instead of pre-req

* use go.uber.org/atomic to make the code a little easier to follow

* remove started callback for running integration

* use smaller interface for autoscrape

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Fix panic when using 'stdout' in automatic logging (#1233)

* integrations-next: fix bug where v2 integrations were not being strictly unmarshaled (#1235)

* Remove jsonnet vendor folders (#1222)

* remove jsonnet vendor

This adds all vendor folders into .gitignore and removes cached vendor
files from the repository.

Closes #1221

* Update scripts and instructions for jsonnet vendor removal

* `make example-dashboards` will now also run `jb install`
* k3d environment instructions now include `jb install`
* smoke-test.bash will now run `jb install` prior to `tk apply`

* Fix link to k3d example in DEVELOPERS.md (#1242)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Fix node_exporter upgrade docs (#1239)

* Fix panic in automatic logging with stdout backend (#1243)

* pkg/util: support custom yaml.Unmarshaler implementations for util.UnmarshalYAMLMerged (#1244)

It's common for config types to have implement yaml.Unmarshaler for:

* Applying defaults
* Applying extra logic post-unmarshal

If these config types were unmarshaled through util.UnmarshalYAMLMerged,
the yaml.Unmarshaler implementation would never complete successfully,
preventing the post-unmarshal logic from running.

This issue was introduced in #1192, but went unnoticed until #1228
implemented yaml.Unmarshaler to perform field migrations. #1240 reported
the issue.

This commit fixes the bug by performing a second non-strict unmarshal to
ensure that all input values unmarshal successfully, with the exception
of unmarshal errors unrelated to unrecognized field names.

This is hacky, but it's worthwhile noting that util.UnmarshalYAMLMerged
is a temporary workaround needed for the integrations-next migration,
and will eventually be removed.

* Update k3d example grafana/grafonnet-lib version (#1246)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Create an e2e framework with support for running tests against k8s (#1234)

* e2e: create an e2e framework with support for running tests against a k3d cluster

* add new E2E drone job

* E2E tests should pass when doing a release

* sign drone.yml again

* move e2e lint to different step that has golangci-lint installed

* upgrade golangci-lint and go for e2e test

* e2e: add gcc

* E2E: install build-essential to get a working full gcc env

* :(

* e2e: support running from inside of docker

* fix lint error

* address review feedback

* Operator: fix bug where /-/ready and /-/healthy always returned 404 (#1252)

* operator: fix bug where /-/ready and /-/healthy always returned 404

controller-runtime must have at least one ready/healthy check for the endpoints to exist

* fix lint error, use healthz.Ping

* Make scraping-svc use the new `metrics:` key (#1259)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* update prometheus dependency (#1260)

* corrected typo (#1265)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags (#1264)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Use :main tag for images in smoke test

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Set IMAGE_BRANCH_TAG env var in drone and actions pipelines

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove quotes from Makefile variable

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove force_release action

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* prepare for v0.22.0 release (#1266)

* prepare for v0.22.0 release

* remove E2E pipeline

* Add basic testing framework for operator (#1268)

* remove dedicated go.mod for e2e/

* move e2e/k8s to pkg/util/k8s

* Migrate operator tests to pkg/util/k8s

* remove dedicated e2e tests

* allow skipping TestCluster in pkg/util/k8s

* remove e2e/

* fix bad merge

* fix order of make env args for windows

* actually declare referenced docker volume

* introduce pkg/util/subset for asserting subset of objects

* refactor operator so it's testable

* define basic integration test for operator

* fix lint errors

* fix invalid address in operator test config

* Update release-note.md (#1267)

* Set scrape User-Agent header during init (#1274)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Upgrade to Go 1.17 (#1278)

* Upgrade to 1.17.6 in go.mod and Dockerfiles

* Update CHANGELOG.md to mention the update

* Update Go version in drone/actions pipelines

* Update go.mod, go.sum files via

* Re-sign drone.yml

* Remove leading newline causing drone build to fail

* Bump golangci-lint image to a version using Go 1.17

* Re-attempt to solve linter issue with new golangci-lint image

* Remove suffix of exclude rules

* Clean previous Go version before unpacking Go 1.17

* Also clean up previous Go versions in other steps

* fix typo (#1284)

* Use custom Go version in agent-operator Dockerfile (#1286)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* pkg/operator: refactor resource hierarchy discovery (#1271)

* pkg/operator: refactor resource hierarchy discovery

This commit moves common logic related to discovering the resource
hierarchy to pkg/operator/hierarchy. This new package requires less
boilerplate, which the reconciler is updated to take advantage of.

* remove unused code

* test construction of resource hierarchy

* add missing build constraints

* small extra cleanup to use pointer package

* review feedback

* update agent-build-image for go 1.17 (#1287)

(also use a consistent base image tag instead of latest)

* Skip non-ready entries when listing instances (#1289)

* Skip non-ready instances in LoadInstances()

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Add changelog entry

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix panic in prom_sd_processor when address is empty (#1279)

* Fix panic in prom_sd_processor when address is empty

* Fix panic in prom_sd_processor when address is empty

* Fix docs

* Add test case

* Lint

* Move to unreleased

* Operator: generate proxy_url for remote_write (#1298)

* operator: generate proxy_url for remote_write

* fix weird indentation in test

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>
Co-authored-by: Paschalis Tsilias <tpaschalis@users.noreply.github.com>
Co-authored-by: Patrick Koenig <pkoenig10@gmail.com>
Co-authored-by: DataPoints <langer.markus@gmail.com>
Co-authored-by: Alex <52292902+alexrudd2@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Main merge dynamic (#1307)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible for calling SetDirectory

* handle nil HTTPClientConfig

* remove blank identifier assignment

* pass basic auth command line flags for remote config

* address pr nits

* add expiremental flag

* set loader inline

* update changelog

* add remote config section in docs

* pr comment updates

* announce patch releases for cve-2021-41090 (#1152)

* Merge patch release to main (#1153)

* Add secret type to sensitive values

* Break out config tests to their own implementation. Also remove username has a sensitive value.

* Update changelog

* Fix failing test

* Scrub secrets when marshaling instance configs

* update for v0.21

* Updated changes from the merge.

* Remove changelog

* Scrub out receivers has ***receivers_scrubber***:null

* obscure etcd/consul credentials

* Update pkg/traces/config_test.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Update pkg/config/config.go

* go fmt

* Change to using custom object and return <secret>

* Fix bad merge

* [v0.21.2] toggle config endpoint (#19)

* disable /-/config endpoint by default

* disable scraping api get endpoint as well

* fix new test

* add test and rename flag

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Update version to v0.21.2

* Update defaults.go

* fix /-/config endpoint

* also fix non-pointer config bug

* temporarily disable linting for release

* fix lint errors

Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter (#1162)

* Fix POSTGRES_EXPORTER_DATA_SOURCE_NAME usage for postgres_exporter

A recent change broke the usage of POSTGRES_EXPORTER_DATA_SOURCE_NAME for the postgres_exporter.
As the incorrect variable was checked in the if clause, it always raises an error.

* changelog: keep feature -> enhancement -> bugfix order

* postgres_exporter: add regression test

Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix syntax error in Jsonnet logs helper method (#1174)

Signed-off-by: Nick Pillitteri <nick.pillitteri@grafana.com>

* cAdvisor Integration (#1081)

* Add cadvisor module

* Begin creating common config for cadvisor

* Don't export internal state

* Finish config options for cadvisor

* Set config options, and implement cAdvisor collectors

* Linting

* Buildflags for cadvisor only in linux

* I R LEArN Build Tags

* Don't zero value the zero value

* Offload sketchy global var manipulation to the integrations Run func

* Remove unused collectors

* Lint

* Create generic stub integration and use it for cadvisor

* Lint

* Final refactor of cAdvisor config for unsupported platforms. Pared down stub integrations.

* Lint

* Docs for cadvisor config

* Update changelog

* Update pkg/integrations/stub_integration.go

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Reorder changelog

* Instance key clarity

* Inclusive naming

* Finish name changes

Keep default disable metric list in sync with upstream

Idiomatic golang

* Hardcode disabled metrics for cadvisor

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>

* Remove log-level flag from systemd unit file (#1177)

* Upgrade to OTel v0.40.0 (#1176)

* Upgrade to OTel v0.40.0

* Changelog

* Add factories check

* go mod tidy

* config/features: create package to standardize experimental features (#1170)

* config/features: create package to standardize experiemental features

This commit introduces a new package, pkg/config/features, which allows
defining a set of features and validating whether flags associated with
those features are allowed to be set.

Closes #1163

* update documentation

(also s/enabled-features/enable-features)

* Fix typo

* Update pkg/config/features/features.go

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Revert "Merge main into dev.multiple-integrations (#1184)" (#1189)

This reverts commit ad76ec54f9a781fc83d3e7001808c887f37833ff.

* [dev.multiple-integrations] Revert breaking changes to existing integrations (#1191)

* revert breaking changes to integrations v1

This commit reverts #1062 in favor of making breaking changes directly
in integrations-next instead. The part of #1181 to remove
`wal_truncate_frequency` has also been reverted.

As part of this change, the enabled field is removed from the v2
common metrics configs, and v2 integrations can no longer be disabled.
v2 integrations can only be disabled by removing them from the YAML.

* integrations/v2: remove stale reference to ErrDisabled

(fix typo too)

* integrations/v2: bring in common config decoupling

* [dev.multiple-integrations] Introduce autoscraper (#1195)

* pkg/integrations/v2: introduce self-scraping

* linting

* [dev.multiple-integrations] Multiple instances of integrations (#1196)

* multiple instances of integrations

opt in relevant v1 integrations into supporting multiple instances

* shims should check for instance key override

* Document integrations-next (#1197)

* document integrations-next

* remove json tags since they make markdown unhappy

* changelog

* s/Run/RunIntegration

* remove stale comment about integrations.controller purpose

* create dedicated run method for instanceScraper

* s/expoter/exporter/g

* Document why an autoscrape.Scraper manages a set of per-instance scrapers

* spell out prerequisite instead of pre-req

* use go.uber.org/atomic to make the code a little easier to follow

* remove started callback for running integration

* use smaller interface for autoscrape

Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: Matt Durham <mattdurham@ppog.org>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>

* Fix panic when using 'stdout' in automatic logging (#1233)

* integrations-next: fix bug where v2 integrations were not being strictly unmarshaled (#1235)

* Remove jsonnet vendor folders (#1222)

* remove jsonnet vendor

This adds all vendor folders into .gitignore and removes cached vendor
files from the repository.

Closes #1221

* Update scripts and instructions for jsonnet vendor removal

* `make example-dashboards` will now also run `jb install`
* k3d environment instructions now include `jb install`
* smoke-test.bash will now run `jb install` prior to `tk apply`

* Fix link to k3d example in DEVELOPERS.md (#1242)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Fix node_exporter upgrade docs (#1239)

* Fix panic in automatic logging with stdout backend (#1243)

* pkg/util: support custom yaml.Unmarshaler implementations for util.UnmarshalYAMLMerged (#1244)

It's common for config types to have implement yaml.Unmarshaler for:

* Applying defaults
* Applying extra logic post-unmarshal

If these config types were unmarshaled through util.UnmarshalYAMLMerged,
the yaml.Unmarshaler implementation would never complete successfully,
preventing the post-unmarshal logic from running.

This issue was introduced in #1192, but went unnoticed until #1228
implemented yaml.Unmarshaler to perform field migrations. #1240 reported
the issue.

This commit fixes the bug by performing a second non-strict unmarshal to
ensure that all input values unmarshal successfully, with the exception
of unmarshal errors unrelated to unrecognized field names.

This is hacky, but it's worthwhile noting that util.UnmarshalYAMLMerged
is a temporary workaround needed for the integrations-next migration,
and will eventually be removed.

* Update k3d example grafana/grafonnet-lib version (#1246)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Create an e2e framework with support for running tests against k8s (#1234)

* e2e: create an e2e framework with support for running tests against a k3d cluster

* add new E2E drone job

* E2E tests should pass when doing a release

* sign drone.yml again

* move e2e lint to different step that has golangci-lint installed

* upgrade golangci-lint and go for e2e test

* e2e: add gcc

* E2E: install build-essential to get a working full gcc env

* :(

* e2e: support running from inside of docker

* fix lint error

* address review feedback

* Operator: fix bug where /-/ready and /-/healthy always returned 404 (#1252)

* operator: fix bug where /-/ready and /-/healthy always returned 404

controller-runtime must have at least one ready/healthy check for the endpoints to exist

* fix lint error, use healthz.Ping

* Make scraping-svc use the new `metrics:` key (#1259)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* update prometheus dependency (#1260)

* corrected typo (#1265)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags (#1264)

* Use RELEASE_TAG to choose between `:main` and `:latest` docker tags

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Use :main tag for images in smoke test

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Set IMAGE_BRANCH_TAG env var in drone and actions pipelines

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove quotes from Makefile variable

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Remove force_release action

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* prepare for v0.22.0 release (#1266)

* prepare for v0.22.0 release

* remove E2E pipeline

* Add basic testing framework for operator (#1268)

* remove dedicated go.mod for e2e/

* move e2e/k8s to pkg/util/k8s

* Migrate operator tests to pkg/util/k8s

* remove dedicated e2e tests

* allow skipping TestCluster in pkg/util/k8s

* remove e2e/

* fix bad merge

* fix order of make env args for windows

* actually declare referenced docker volume

* introduce pkg/util/subset for asserting subset of objects

* refactor operator so it's testable

* define basic integration test for operator

* fix lint errors

* fix invalid address in operator test config

* Update release-note.md (#1267)

* Set scrape User-Agent header during init (#1274)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Upgrade to Go 1.17 (#1278)

* Upgrade to 1.17.6 in go.mod and Dockerfiles

* Update CHANGELOG.md to mention the update

* Update Go version in drone/actions pipelines

* Update go.mod, go.sum files via

* Re-sign drone.yml

* Remove leading newline causing drone build to fail

* Bump golangci-lint image to a version using Go 1.17

* Re-attempt to solve linter issue with new golangci-lint image

* Remove suffix of exclude rules

* Clean previous Go version before unpacking Go 1.17

* Also clean up previous Go versions in other steps

* fix typo (#1284)

* Use custom Go version in agent-operator Dockerfile (#1286)

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* pkg/operator: refactor resource hierarchy discovery (#1271)

* pkg/operator: refactor resource hierarchy discovery

This commit moves common logic related to discovering the resource
hierarchy to pkg/operator/hierarchy. This new package requires less
boilerplate, which the reconciler is updated to take advantage of.

* remove unused code

* test construction of resource hierarchy

* add missing build constraints

* small extra cleanup to use pointer package

* review feedback

* update agent-build-image for go 1.17 (#1287)

(also use a consistent base image tag instead of latest)

* Skip non-ready entries when listing instances (#1289)

* Skip non-ready instances in LoadInstances()

Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>

* Add changelog entry

Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* Fix panic in prom_sd_processor when address is empty (#1279)

* Fix panic in prom_sd_processor when address is empty

* Fix panic in prom_sd_processor when address is empty

* Fix docs

* Add test case

* Lint

* Move to unreleased

* Operator: generate proxy_url for remote_write (#1298)

* operator: generate proxy_url for remote_write

* fix weird indentation in test

Co-authored-by: Robert Fratto <robert.fratto@grafana.com>
Co-authored-by: Ursula Kallio <73951760+osg-grafana@users.noreply.github.com>
Co-authored-by: Mario <mariorvinas@gmail.com>
Co-authored-by: Robert Lankford <robert.lankford@grafana.com>
Co-authored-by: f11r <fiete.gruenter@rwth-aachen.de>
Co-authored-by: f11r <f11r@users.noreply.github.com>
Co-authored-by: Nick Pillitteri <56quarters@users.noreply.github.com>
Co-authored-by: Ryan Geyer <me@ryangeyer.com>
Co-authored-by: Juraci Paixão Kröhling <juraci.github@kroehling.de>
Co-authored-by: Robert Lankford <rlankfo@gmail.com>
Co-authored-by: Paschalis Tsilias <tpaschalis@users.noreply.github.com>
Co-authored-by: Patrick Koenig <pkoenig10@gmail.com>
Co-authored-by: DataPoints <langer.markus@gmail.com>
Co-authored-by: Alex <52292902+alexrudd2@users.noreply.github.com>
Co-authored-by: Robert Fratto <robertfratto@gmail.com>

* [RFC] Dynamic Documentation (#1308)

* Documentation and feature flag support. Part 1 of many.

* Fix linting

* Documentation

* More documentation

* MOAR documentation

* Update overall readme

* fix typo

* Update docs/configuration/dynamic-config.md

Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* fix typos and add additional comments

* Feedback from PR

* Allow overrides of documentation

Co-authored-by: Robert Lankford <robert.lankford@grafana.com>

* Code to support dynamic configuration. (#1360)

* Code to support dynamic configuration.

* Fix linting errors

* Fix issue with examples and add template parse

* Fix windows issues

* Simplify tests

* Respond to PR feedback

* Simplify tests and remove setting default

* Move to unexported configshim

* Export configshims members for testing

* Simplify singleton checking

* Add error around expand var

* sever -> server

* Better error code

* Fix error when unmarshalling yaml which allowed unexporting fields

* Switch to using require.noerror instead of assert.

* Split tests into two sections and remove redundant tests

* Verbiage cleanup and var renaming

* PR feedback

* PR feedback

* Move singleton check to the controller instead

* Cleanup the read file code to MUCH more compact code.

* Remove EOF

* PR feedback from session with rfratto, lots of changes to simplify the code

* Fix misc feedback from PR

* Dyn main merge (#1423)

* Update node_exporter dependency to v1.3.1 (#1228)

* Add node_exporter to depcheck

* update weaveworks/common dependency

* map current release flags and changed defaults

* documentation

* revert accidental checkin

* print out flags when node_exporter test fails to assist debugging

* oops, i introduced some flags from master by mistake

* Introduce experimental integrations revamp (#1198)

* [dev.multiple-integrations] Enable present integrations by default, deprecate enabled field (#1062)

* integrations: default to enabled by default

* document deprecation of enabled

* pkg/integrations: support *_configs field for integrations (#1130)

Creates the basic code to unmarshal integrations from a YAML field
called <integration name>_configs, which is a slice of that integration.

Note that this is NOT wired up to the integrations manager yet, and
trying to run the agent with more than one integration of the same type
will likely cause problems.

* [dev.multiple-integrations] Prototype new integrations subsystem (#1142)

* wip: prototype new integrations subsystem

* implement Controller with basic logic for Integration and UpdateIntegration

* Implement HTTPIntegration for Controller

* decouple controller and subsystem

* don't have controller implement integration

slightly less smelly now

* multiplexer integration

* rely on boilerplate for multiplexing for now

generics would be nice here

* remove multiplex_integration.go

Also a little code smelly. Instead of having integrations that run other
integrations, I'm going to fall back to having only one controller.

* introduce Subsystem, unexport Controller

start wiring up things to Subsystem

* introduce v2 agent integration to use for testing

* start wiring metrics integrations

* rename Options to Globals

call a spade a spade

* add subsystem options to globals

* remove dead code

* metricsutils: calculate self-scraping based on globals

* complete HTTP target API

* working example with agent integration

* appease the linter

* don't return an error when context to cancel an integration is closed

* once again i am asking the linter to forgive my typos

* fix bug where labels from individual targets were getting dropped at the API endpoint

* pkg/config: fix broken test

* finish unit tests for integrations v2 controller

* metricsutil/metricshandler_integration: make job name unique

Before this change, the job name would have collided when using multiple
instances of the same integration.

* ensure that global subsystem labels are injected into targets

* integrations/v2: Infer target hostname from SD API host (#1175)

* [dev.multiple-integrations] integrations/v2: allow shimming between v1 and v2 integrations. (#1179)

* integrations/v2: allow shimming between v1 and v2 integrations.

Shimming is done by changing how the integration registration works; a
new RegisterDynamic was added that allows for creating Configs at
runtime. Here be dragons; this should be removed whenever we no longer
have a need for it.

* fix lint

* pkg/integrations/v2: use "RegisterLegacy" instead of a generic mechanism

* fine, I won't add the deprecation notice if it will make the linter sad

* pkg/integrations: re-align (#1181)

This commit reverts 69ba2ddfa9483cc8ac6e010dd7abccd319580c80 in favor of
allowing the new subsystem to handle multiple instances of integrations.

This commit also removes the wal_truncate_frequency field from
integrations as it is the only field from old integrations that does not
have a current counterpart.

* [dev.multiple-integrations] Hide integrations/v2 behind a feature flag (#1185)

* feature flag wip

* dynamically switch between integrations v1 and v2

default to v1.

* pkg/integrations/versionselector to file in pkg/config

* pkg/config: fix defaults for Integrations

* pkg/config: use more generic way to unmarshal differently based on flag

* add missing godoc comment

* more comments

* switch to deferred unmarshaling

* remove unused Config field

* simplify completeUnmarshal

* do not perform lazy deferred unmarshaling

* enable cadvisor by default

* switch to using real feature flag

* fix postgres_exporter

* Merge main into dev.multiple-integrations (#1184)

* Fix typo (#1141)

* Traces: Improved pod association in PromSD processor (#1137)

* Improve k8s pod association

* Add tests

* Changelog

* typo

* Add prom_sd_pod_association

* Extend tests for pod associations

* Docs for pod association config

* Lint fixes

* Move to unreleased

* Add instrumentation recommendations

* Remove uncessary constants

* Improve tests

* remote config with http(s) provider (#1143)

* sample remote config code with http provider

* use t.TempDir() in unit test

* no need to clean up after T.TempDir()

* use NewClientFromConfig and make caller responsible…
@github-actions github-actions Bot added the frozen-due-to-age Locked due to a period of inactivity. Please open new issues or PRs if more discussion is needed. label Apr 4, 2024
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Apr 4, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

frozen-due-to-age Locked due to a period of inactivity. Please open new issues or PRs if more discussion is needed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants