Skip to content

Commit 65a8188

Browse files
author
Pat Maddox
authored
Add support Grafana Agent v0.29.0 (#184)
* Add 0.29.0 to downloader * Set port options as config or flags depending on agent version
1 parent 74473dc commit 65a8188

File tree

7 files changed

+96
-8
lines changed

7 files changed

+96
-8
lines changed

lib/prom_ex/config.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ defmodule PromEx.Config do
151151
any malicious binaries and running them). By default, PromEx will use the result of
152152
`PromEx.GrafanaAgent.Downloader.default_version()` if no value is provided.
153153
154-
* Supported versions are `["0.23.0", "0.22.0", "0.21.2", "0.20.1"]`
154+
* Supported versions are `["0.29.0", "0.23.0", "0.22.0", "0.21.2", "0.20.1"]`
155155
156156
* `:working_directory` - In order to leverage the GrafanaAgent functionality, PromEx needs to have
157157
read/write access to a directory in order to download and copy the GrafanaAgent binary. This is the

lib/prom_ex/grafana_agent.ex

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,37 @@ defmodule PromEx.GrafanaAgent do
7070
{:noreply, state}
7171
end
7272

73-
defp start_agent(%{port_wrapper_path: port_wrapper_path, binary_path: binary_path, config_file_path: config_file_path}) do
73+
defp start_agent(
74+
%{
75+
port_wrapper_path: port_wrapper_path,
76+
binary_path: binary_path,
77+
config_file_path: config_file_path,
78+
grafana_agent_config: %{
79+
config_opts: %{
80+
agent_port: agent_port,
81+
grpc_port: grpc_port
82+
}
83+
}
84+
} = state
85+
) do
7486
Logger.info("Starting GrafanaAgent")
7587

88+
wrapper_args = [binary_path, "-config.file", config_file_path]
89+
90+
wrapper_args =
91+
if pre_v0_26?(state) do
92+
wrapper_args
93+
else
94+
wrapper_args ++
95+
["-server.http.address", "127.0.0.1:#{agent_port}", "-server.grpc.address", "127.0.0.1:#{grpc_port}"]
96+
end
97+
7698
{:spawn_executable, port_wrapper_path}
7799
|> Port.open([
78100
:binary,
79101
:exit_status,
80102
:stderr_to_stdout,
81-
args: [binary_path, "-config.file", config_file_path]
103+
args: wrapper_args
82104
])
83105
end
84106

@@ -146,6 +168,7 @@ defmodule PromEx.GrafanaAgent do
146168
|> Map.get(:grafana_agent_config)
147169
|> Map.get(:config_opts)
148170
|> Map.put(:wal_dir, wal_dir)
171+
|> Map.put(:render_listen_port, pre_v0_26?(state))
149172
|> maybe_put_job(state)
150173
|> maybe_put_instance()
151174
|> ConfigRenderer.generate_config_file(config_dir)
@@ -169,4 +192,6 @@ defmodule PromEx.GrafanaAgent do
169192
defp maybe_put_instance(opts) do
170193
opts
171194
end
195+
196+
defp pre_v0_26?(%{grafana_agent_config: %{version: version}}), do: Version.compare(version, "0.26.0") == :lt
172197
end

lib/prom_ex/grafana_agent/downloader.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ defmodule PromEx.GrafanaAgent.Downloader do
77
latest_version: "0.23.0",
88
github_repo: "grafana/agent",
99
download_versions: %{
10+
"0.29.0" => [
11+
{:darwin, :amd64, "2b51aab7cfa4daf9b18c857c85dddb9ee9086e7470c3585be661fd6577e15afe"},
12+
{:darwin, :arm64, "4bf44f44a1e9f4e9c257bea8bcf63549bf4f8f575f8afca94ff0cac371f55ed9"},
13+
{:linux, :amd64, "aa07cc24de9d607e6388ce85eec76b250f6a4f304ba86ec7e38fc351d9a2739a"},
14+
{:linux, :arm64, "7d402893564e4054d7e1401d10031b9c2841832a2dab5212184f2b606cd08b0d"},
15+
{:freebsd, :amd64, "28becd3451ae8d56f4976e87a622da7cd11ce8a02d9bd9f1ee6517785c7fd594"}
16+
],
1017
"0.23.0" => [
1118
{:darwin, :amd64, "643044b35ed4bdfd9866a43b70e39d64f16709f9685b89a03b299da8834661b0"},
1219
{:darwin, :arm64, "e94f7fd0e1ef9fb497cff4f1260cc22967d6a5b003dd2c99f494f9e457482dda"},

priv/grafana_agent/default_config.yml.eex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
server:
2+
log_level: <%= @log_level %><%= if @render_listen_port do %>
23
http_listen_port: <%= @agent_port %>
3-
grpc_listen_port: <%= @grpc_port %>
4-
log_level: <%= @log_level %>
4+
grpc_listen_port: <%= @grpc_port %><% end %>
55

66
prometheus:
77
wal_directory: "<%= @wal_dir %>"
@@ -17,7 +17,7 @@ prometheus:
1717
static_configs:
1818
- targets: ["<%= @metrics_server_host %>:<%= @metrics_server_port %>"]
1919
metric_relabel_configs:
20-
- source_labels: [ instance ]
20+
- source_labels: [instance]
2121
target_label: instance
2222
action: replace
2323
replacement: "<%= @instance %>"

test/prom_ex/grafana_agent/config_renderer_test.exs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ defmodule PromEx.GrafanaAgent.ConfigRendererTest do
99
template_args = %{
1010
agent_port: "12345",
1111
grpc_port: "54321",
12+
render_listen_port: true,
1213
log_level: "error",
1314
wal_dir: "/tmp/test/wal",
1415
scrape_interval: "5s",
@@ -47,5 +48,33 @@ defmodule PromEx.GrafanaAgent.ConfigRendererTest do
4748
assert File.exists?(expected_file_path)
4849
assert File.read!(expected_file_path) == "foo: this is a foo"
4950
end
51+
52+
@tag :tmp_dir
53+
test "should omnit agent_port and grpc_port from >= v0.26.0", %{tmp_dir: tmp_dir} do
54+
template_args = %{
55+
agent_port: "12345",
56+
grpc_port: "54321",
57+
render_listen_port: false,
58+
log_level: "error",
59+
wal_dir: "/tmp/test/wal",
60+
scrape_interval: "5s",
61+
job: "TestApp",
62+
metrics_server_path: "/cool-metrics",
63+
metrics_server_scheme: :https,
64+
metrics_server_host: "localhost",
65+
bearer_token: "super_secret",
66+
metrics_server_port: "1234",
67+
instance: "localhost",
68+
prometheus_url: "www.my-prometheus.com",
69+
prometheus_username: "prom_user",
70+
prometheus_password: "prom_pass"
71+
}
72+
73+
ConfigRenderer.generate_config_file(template_args, tmp_dir)
74+
expected_file_path = "#{tmp_dir}/agent.yml"
75+
76+
assert File.exists?(expected_file_path)
77+
assert File.read!(expected_file_path) == File.read!("#{__DIR__}/expected_output_config_post_v0_26.yml")
78+
end
5079
end
5180
end

test/prom_ex/grafana_agent/expected_output_config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
server:
2+
log_level: error
23
http_listen_port: 12345
34
grpc_listen_port: 54321
4-
log_level: error
55

66
prometheus:
77
wal_directory: "/tmp/test/wal"
@@ -17,7 +17,7 @@ prometheus:
1717
static_configs:
1818
- targets: ["localhost:1234"]
1919
metric_relabel_configs:
20-
- source_labels: [ instance ]
20+
- source_labels: [instance]
2121
target_label: instance
2222
action: replace
2323
replacement: "localhost"
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
server:
2+
log_level: error
3+
4+
prometheus:
5+
wal_directory: "/tmp/test/wal"
6+
global:
7+
scrape_interval: 5s
8+
configs:
9+
- name: TestApp
10+
scrape_configs:
11+
- job_name: TestApp
12+
metrics_path: /cool-metrics
13+
scheme: https
14+
bearer_token: "super_secret"
15+
static_configs:
16+
- targets: ["localhost:1234"]
17+
metric_relabel_configs:
18+
- source_labels: [instance]
19+
target_label: instance
20+
action: replace
21+
replacement: "localhost"
22+
23+
remote_write:
24+
- url: "www.my-prometheus.com"
25+
basic_auth:
26+
username: "prom_user"
27+
password: "prom_pass"

0 commit comments

Comments
 (0)