рдорд╛рдЗрдХреНрд░реЛрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЗрд╡реАрдПрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡рд╕рдВрдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдореАрдЯрд░ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЛ рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ (
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рдЕрдЪреНрдЫреА рдкреЛрд╕реНрдЯ )ред рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рдЖрд╡реЗрджрди рд╕реНрдкреНрд░рд┐рдВрдЧ 3 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд┐рдирд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЧреНрд░рд╛рд╣рдХ рд╕реНрд╡рдпрдВ рдФрд░ рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд▓реЗрдЯ:
pom.xml<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.6.0</version> </dependency> <dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_servlet</artifactId> <version>0.6.0</version> </dependency>
рдЗрд╕рдХреЗ рдмрд╛рдж, web.xml рдореЗрдВ рдореЗрдЯрд▓реЗрдЯ рдирд┐рд░реНрдпрд╛рдд рд╕рд░реНрд╡рд▓реЗрдЯ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕ рдкрде рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛:
<servlet> <servlet-name>prometheus</servlet-name> <servlet-class>io.prometheus.client.exporter.MetricsServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>prometheus</servlet-name> <url-pattern>/metrics</url-pattern> </servlet-mapping>
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдПрдХ рдПрдХреНрд╕реЗрд╕ рдкреЙрд▓рд┐рд╕реА рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ:
<http pattern="/metrics" security="none"/>
рдЕрдм рдЖрдВрдХрдбрд╝реЗ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8080 / рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдХреЛрд░рд╛ рдкреГрд╖реНрда рд╣реИред рдЗрд╕рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдорд╛рдЗрдХреНрд░реЛрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП:
pom.xml <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.1.3</version> </dependency>
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдореАрдЯреНрд░рд┐рдХ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
@WebListener public class PrometheusInitListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { PrometheusMeterRegistry meterRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT, CollectorRegistry.defaultRegistry, Clock.SYSTEM); new ClassLoaderMetrics().bindTo(meterRegistry); new JvmMemoryMetrics().bindTo(meterRegistry); new JvmGcMetrics().bindTo(meterRegistry); new ProcessorMetrics().bindTo(meterRegistry); new JvmThreadMetrics().bindTo(meterRegistry); } @Override public void contextDestroyed(ServletContextEvent sce) { } }
рд╣реЛ рдЧрдпрд╛, рдЕрдм рдЕрдЧрд░ рд╣рдо рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8080 / рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЬреЗрд╡реАрдПрдо рдкрд░ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдЧрд╛ред
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдкрд╛рд╕ рд╕реНрд╡рдпрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЬреЗрд╡реАрдПрдо рдХреЗ рдЖрдБрдХрдбрд╝реЗ
simpleclient_hotspot рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ, рдЬрд┐рд╕реЗ
DefaultExports.initialize () рдХрд╣рдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рд╡реЗрдм рд╢реНрд░реЛрддрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВред
Prometheus.yml рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝реЗрдВ:
scrape_configs: - job_name: 'test-server' # Override the global default and scrape targets from this job every 5 seconds. scrape_interval: 5s metrics_path: /metrics static_configs: - targets: ['localhost:8080']
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рдкреНрд░реЛрдореЗрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рдЗрдХреНрд░реЛрдореАрдЯрд░ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореАрдЯреНрд░рд┐рдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧреНрд░рд╛рдлрд╛рдирд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, рдкреНрд▓рдЧрдЗрди 4683