Application Monitoring

185 views
Skip to first unread message

Rich

unread,
Aug 15, 2022, 9:01:38 AM8/15/22
to golang-nuts
My company relies heavily on Java., Java apps we run require Introscope or Glowroot to monitor them and many outages have been solved using those tools.  If we were to write our apps in Go -- would we need an application monitoring tool, or would standard Linux tools suffice?

Thanks-- Rich

K. Alex Mills

unread,
Aug 16, 2022, 9:20:45 AM8/16/22
to Rich, golang-nuts
Monitoring and observability are best practices regardless of what language you use. We use a combination of Prometheus / Grafana and metrics exported by runtime/metrics. We also include custom metrics tailored to our application's use-case.

Prometheus is not a standard Linux tool, but it is open source, production-ready, language-agnostic, and widely used.


On Mon, Aug 15, 2022, 8:01 AM Rich <rma...@gmail.com> wrote:
My company relies heavily on Java., Java apps we run require Introscope or Glowroot to monitor them and many outages have been solved using those tools.  If we were to write our apps in Go -- would we need an application monitoring tool, or would standard Linux tools suffice?

Thanks-- Rich

--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/f65a5920-3dde-495b-bc87-0e14f2512e86n%40googlegroups.com.

Rich

unread,
Aug 17, 2022, 12:40:43 PM8/17/22
to golang-nuts
Right but Prometheus / Grafana is just a collector of the data output by runtime/metrics.   Where introscope / glowroot are configured at the java command line to and pull that information out of the java JVM.  Please correct me if I am wrong?

Thanks!!

Brian Candler

unread,
Aug 17, 2022, 1:36:42 PM8/17/22
to golang-nuts
The go prometheus client exposes a set of metrics about the go runtime, primarily around memory allocation, in addition to any that your application itself may choose to create. e.g.

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 6.0172e-05
go_gc_duration_seconds{quantile="0.25"} 9.5332e-05
go_gc_duration_seconds{quantile="0.5"} 0.000156344
go_gc_duration_seconds{quantile="0.75"} 0.000251318
go_gc_duration_seconds{quantile="1"} 0.009676708
go_gc_duration_seconds_sum 50.006084432
go_gc_duration_seconds_count 65939
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 8
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.17.3"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 1.723848e+06
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 1.5390297904e+11
... etc

If you're looking for application bottlenecks, google for "go profiling" or "go pprof" and you'll find plenty of helpful guides.
Reply all
Reply to author
Forward
0 new messages