andreyuhai

andreyuhai

Telemetry metrics how to increment counter by a given amount?

I think I don’t really get the idea of measurement options in Telemetry.Metrics.

I’ve got a function

def batch_process_jobs do
       # process jobs somewhere here...

        :telemetry.execute(
          [:my_app, :jobs],
          %{count: length(failed_task_ids)},
          %{status: "failed"}
        )

        :telemetry.execute(
          [:my_app, :jobs],
          %{count: length(succeeded_task_ids)},
          %{status: "succeeded"}
        )
end

So the idea is I want to see how many jobs failed and how many jobs succeeded after a batch process. My thinking is that if I give the number of failed and succeeded jobs (by calculating the length of IDs) as the count I’d expect that much increase in my bar graph as I am grouping by status.

Below you can see an example graph. As you can see both succeeded (light blue) and failed (dark blue) job count are the same however that’s not the case actually.

Why does that happen? When and how to use the measurement options like I tried in this case by giving count?

Edit: I figured that the count in the graph is actually the number of times :telemetry.execute was invoked for that specific metric type. Since they are in the same block, they are called the same number of times regardless of the count value I pass. Not sure whether that helps.

Cheers,
Burak

Marked As Solved

andreyuhai

andreyuhai

I think I’ve figured it out, I’ve tested it as well so it worked.

We are using telemetry_metrics_statsd as the reporter and from its docs regarding the counter metric:

Note that the counter was bumped by 1, regardless of the measurements included in the event (careful reader will notice that the :count measurement we chose for the metric wasn’t present in the map of measurements at all!). Such behaviour conforms to the specification of counter as defined by Telemetry.Metrics package - a counter should be incremented by 1 every time a given event is dispatched.

What I should’ve used instead is the sum metric:

Sum metric is also represented as a gauge - the difference is that it always changes relatively and is never set to an absolute value. Given metric definition below

So I’ve changed this

counter("my_app.jobs.count", tags: [:status]),

into this:

sum("my_app.jobs.count",
  tags: [:status],
  reporter_options: [report_as: :counter]
)

I think I should’ve mentioned that in my question to start with, but I didn’t know it could be related. Sorry for that.

Where Next?

Popular in Questions Top

dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
Tee
can someone please explain to me how Enum.reduce works with maps
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Codball
Mix format works fine if run from the cmd. I’ve followed this to facilitate the implementation into VSC which involves downloading an ext...
New

Other popular topics Top

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
Tee
can someone please explain to me how Enum.reduce works with maps
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

We're in Beta

About us Mission Statement