Skip to content

Latest commit

 

History

History

09

Metrics

In this part, you'll add metrics to your application to measure the number of cache hits and misses. Review the documentation on metrics. In searcher.go, declare two counters called "search_cache_hits" and "search_cache_misses" at package scope.

Solution.

workshops/09/searcher.go

Lines 27 to 37 in 4eca79e

// Two counters that count cache hits and misses in the Search method.
var (
cacheHits = metrics.NewCounter(
"search_cache_hits",
"Number of Search cache hits",
)
cacheMisses = metrics.NewCounter(
"search_cache_misses",
"Number of Search cache misses",
)
)

Inside the Search method, increment the "search_cache_hits" counter whenever there is a cache hit, and increment the "search_cache_misses" metric whenever there is a cache miss.

Solution.

workshops/09/searcher.go

Lines 54 to 63 in 4eca79e

// Try to get the emojis from the cache, but continue if it's not found or
// there is an error.
if emojis, err := s.cache.Get().Get(ctx, query); err != nil {
s.Logger(ctx).Error("cache.Get", "query", query, "err", err)
} else if emojis != nil {
cacheHits.Inc()
return emojis, nil
} else {
cacheMisses.Inc()
}

Build and run your application using weaver multi deploy:

$ go build .
$ weaver multi deploy config.toml

In a separate terminal, curl your application with various queries, making sure to repeat some requests.

$ curl "localhost:9000/search?q=two"    # MISS 1
$ curl "localhost:9000/search?q=two"    # HIT  1
$ curl "localhost:9000/search?q=three"  # MISS 2
$ curl "localhost:9000/search?q=three"  # HIT  2
$ curl "localhost:9000/search?q=three"  # HIT  3
$ curl "localhost:9000/search?q=four"   # MISS 3
$ curl "localhost:9000/search?q=four"   # HIT  4
$ curl "localhost:9000/search?q=four"   # HIT  5
$ curl "localhost:9000/search?q=four"   # HIT  6

Run weaver multi metrics to see a snapshot of the metric values.

$ weaver multi metrics cache
╭────────────────────────────────────────────────────────────────────────╮
│ // Number of Search cache hits                                         │
│ search_cache_hits: COUNTER                                             │
├───────────────────┬────────────────────┬───────────────────────┬───────┤
│ serviceweaver_app │ serviceweaver_node │ serviceweaver_version │ Value │
├───────────────────┼────────────────────┼───────────────────────┼───────┤
│ workshops         │ 8e6a334e           │ dbfaaaa8              │ 4     │
│ workshops         │ a3cda9a8           │ dbfaaaa8              │ 0     │
│ workshops         │ a53facb6           │ dbfaaaa8              │ 0     │
│ workshops         │ b1e20fcf           │ dbfaaaa8              │ 0     │
│ workshops         │ f3a32208           │ dbfaaaa8              │ 2     │
│ workshops         │ ff25d22e           │ dbfaaaa8              │ 0     │
╰───────────────────┴────────────────────┴───────────────────────┴───────╯
╭────────────────────────────────────────────────────────────────────────╮
│ // Number of Search cache misses                                       │
│ search_cache_misses: COUNTER                                           │
├───────────────────┬────────────────────┬───────────────────────┬───────┤
│ serviceweaver_app │ serviceweaver_node │ serviceweaver_version │ Value │
├───────────────────┼────────────────────┼───────────────────────┼───────┤
│ workshops         │ 8e6a334e           │ dbfaaaa8              │ 1     │
│ workshops         │ a3cda9a8           │ dbfaaaa8              │ 0     │
│ workshops         │ a53facb6           │ dbfaaaa8              │ 0     │
│ workshops         │ b1e20fcf           │ dbfaaaa8              │ 0     │
│ workshops         │ f3a32208           │ dbfaaaa8              │ 2     │
│ workshops         │ ff25d22e           │ dbfaaaa8              │ 0     │
╰───────────────────┴────────────────────┴───────────────────────┴───────╯

weaver multi metrics shows the current value of every metric on all replicas. Your application has six replicas—two replicas of weaver.Main, two replicas of Searcher, and two replicas of Cache—which is why you see six entries for each metric. Only two of these entries, the two replicas of Searcher, should report non-zero values.

Refer to the documentation on single process metrics and multiprocess metrics for instructions on how to view metrics using Prometheus.

⬅️ Previous Part     ⚫     Next Part ➡️