How to configure getting statsd performance metrics into graphite? - monitoring

This question mentions two types of performance stats:
carbon.*: Stats from graphite itself.
stats.* : Stats from statsd.
I am seeing 1., but I'm not seeing 2.
Is there a statsd configuration setting (e.g. some entry in the js file) which will let me see 2.?

(2) should be generated by default, but the default prefix is statsd. and not stats. as you've said. Maybe check that you don't have any Graphite rules expecting the wrong prefix.
You can also configure the prefix to whatever you want using the prefixStats property in the .js config file.
See the documentation in the example config:
https://github.com/etsy/statsd/blob/master/exampleConfig.js

Related

Configuring dask gateway via env vars

In dask gateway's config docs, there is a setting adaptive period. How does this interact with the standard dask.config variable DASK_DISTRIBUTED__ADAPTIVE__INTERVAL? In general, the GatewaySchedulerService seems to have a parameters that mimic some dask.config options.
Are the following dask config vars used or ignored when using a gateway?
DASK_DISTRIBUTED__SCHEDULER__WORKER_TTL
DASK_DISTRIBUTED__ADAPTIVE__INTERVAL
DASK_DISTRIBUTED__ADAPTIVE__WAIT_COUNT
DASK_DISTRIBUTED__ADAPTIVE__TARGET_DURATION
If they are used, where should they be set? In the configuration yaml at gateway.backend.scheduler.extraContainerConfig, or some other place?

Configure Eleventy not to use directories for output?

Is it possible somehow to do a general configuration for Eleventy so that 'my_file.html' in the input folder ends up just as 'my_file.html' in the _site folder, not '/my_file/index.html'?
I know I can do it on a file by file basis with permalinks. But I'd like it configured for the site as a whole, if possible.
Unfortunately, since this behavior isn't encouraged, there isn't a simple configuration option to disable the directory output.
However, since permalink is part of the data cascade, you can set a global default, and in combination with the filePathStem computed data, you can set the output to be .html files.
To set a permalink using a global data file, add a permalink.js file to your global _data directory.
// _data/permalink.js
module.exports = '/{{ page.filePathStem }}.html'
There is also a config global data option coming soon to v1.0.0. I am not sure if it will handle the {{ page.filePathStep }} preprocessing, but if it does, that could be an option too, especially since it will keep config-related things inside the config file.
Yes, you can control where Eleventy writes things out by specifying a permalink value in the front matter. This is covered here: https://www.11ty.dev/docs/permalinks/#remapping-output-(permalink)
An example would be:
---
permalink: "/my_file.html"
---

JMeter v.5+ - how to change retrieved embedded resources format in JMeter v5.2.1 to get full urls?

In JMeter 5.2.1, by default I have response with embedded resources in abstract format like that:
domain/path
domain/path-0
domain/path-1
domain/path-2
domain/path-3
...
(etc.)
I need to see normal URLs to each embedded resource instead of these abstract suffixes with -0,-1,-2,-3 etc. (like it worked in JMeter v.3).
How is it possible to set up, to have embedded resources in format of full URLs for each embedded resource?
Could you please give me a tip or lifehack for that for JMeter v.5+?
If this is something you really need, you can add the next line to user.properties file (it lives under "bin" folder of your JMeter installation):
subresults.disable_renaming=true
For one-time usage the property can be overridden via -J command-line argument like:
jmeter -Jsubresults.disable_renaming=true -n -t test.jmx -l result.jtl
Check out Apache JMeter Properties Customization Guide article for more information on JMeter properties and ways of setting/overriding them. You might also be interested in Settings that affect SampleResults chapter of JMeter Properties Reference
However you should be doing this only if you plan to use JMeter for some form of functional testing because it will break the logic of HTTP Request sampler elapsed time calculation in the HTML Reporting Dashboard

exporting custom metrics through prometheus jmx exporter

I can see jvm, process, java etc metrics on a /metrics endpoint when using the jmx_exporter but not the custom metrics I have exposed through JMX.
When I remove the agent and add a jolokia agent, I can see those custom metrics without problem on Jolokia's exposed endpoint in JSON format. That proves it exists.
jmx exporter agent config
rules:
- pattern: ".*"
I have scoured through stackoverflow and google groups. Many people have raised similar issues but I can't see a solution.
Any help on why this is not working as expected.
You need to add a whitelist entry with a pattern for the object names of your custom JMX Beans.
Example: Assume domain foo, then adding the following to your JMXExporter configuration YAML at top level
whitelist: ["foo:*"]
will print all the metrics for the beans in the foo domain.
Sidenote: I found it kind of tricky to work with pattern entries in the rule set, so I'm gonna add my findings in case you run in this follow up problem.
So, the pattern string for the pattern entries in the rules section must apply to a specific normalized representation for bean metrics (see documentation):
domain<beanpropertyName1=beanPropertyValue1, beanpropertyName2=beanPropertyValue2, ...><key1, key2, ...>attrName: value
If you provide a pattern entry in a rule item, this is used in JMXCollector.java (line 174-175) to create a regex pattern as follows
if (yamlRule.containsKey("pattern")) {
rule.pattern = Pattern.compile("^.*(?:" + (String)yamlRule.get("pattern") + ").*$");
}
JMXCollector uses this to check if your rule set applies to a given bean (or otherwise apply the default exposition formatter).
JMXExporter will aid you a little in constructing a pattern matcher by providing the normalized format in the HELP ... line if you let it use the default formatter (by not adding an entry to the rules section). If you do a run with no rules, you can copy the normalized bean metric representation and use this to define a matching pattern.
I followed this tutorial and i was able to
https://reachmnadeem.wordpress.com/2020/12/06/monitoring-jmx-enabled-java-applications-with-prometheus/
i used this config just as a starting point for the jmx export to show its information on its metrics page.
---
jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:5555/jmxrmi
startDelaySeconds: 0
ssl: false
rules:
- pattern: 'com.company.monitoring:*'
name: consumer
value: 3
valueFactor: 0.001
labels: {}
help: "Cassandra metric"
cache: false
type: GAUGE
attrNameSnakeCase: false

Dropwizard: customize health check address and format

Is it possible to customize Dropwizrd's healthcheck output so that, e.g.: /health for healthchecks instead of /healthcheck and some output like {“status”: 200}.
I realise I could simply write a new resource that does what ever I need, I was just wondering if there is a more standard way to do this.
From what I have read on the 0.7.1 source code it's not possible to change the resource URI for healthchecks unfortunately, I highly doubt you can change the healthcheck format. I also remember people complaining about not being able to add REST resources to admin page, only servlets. Maybe on 0.8.0?
Here are the details of what I've tracked so far on the source code. Maybe I have misread or misunderstood something, so somebody could fix it.
Metrics has actually written AdminServlet to add healtcheck servlet in a way that it checks the servlet config whether the URI is defined or not.
this.healthcheckUri = getParam(config.getInitParameter(HEALTHCHECK_URI_PARAM_KEY), DEFAULT_HEALTHCHECK_URI);
But dropwizard doesn't provide a way to inject this configuration in any way on AbstractServerFactory.
handler.addServlet(new NonblockingServletHolder(new AdminServlet()), "/*");
NonblockingServletHolder is the one which is providing the config to AdminServlet but is created by AbstractServerFactory with empty constructor and provides no way to change the config.
I've thought of and tried to access the ServletHolder from the Environment object on Application.run method but the admin servlets are not created until after run method is run.
environment.getAdminContext().getServletHandler().getServlets()[0].setInitParameter("healthcheck-uri", "/health");
Something like this in your run() function will help you control the URI of your healthchecks:
environment.servlets().addServlet(
"HealthCheckServlet",
new HealthCheckServlet(environment.healthChecks())
).addMapping("/health");
If you want to actually control what's returned you need to write your own resource file. Fetch all the healthchecks from the registery, run them and return whatever aggregated value you want based on their results.

Resources