package prometheus-reporter
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Renderer and standard collectors for Prometheus monitoring
Install
dune-project
Dependency
Authors
Maintainers
Sources
prometheus-2.0.tbz
sha256=94cb5e95606d5ff17b4d11801ead1ea1981c06b17b084950d7a032933d991a83
sha512=236cc53cc50e24e18e31bf58dd29e9b98b50da0a92f7077d37ff13088c2b31eee49ed4eced8322f67406b0e4216c4751685002d357d9056335f7fc3e618c7f13
doc/src/prometheus-reporter.unix/prometheus_reporter_unix.ml.html
Source file prometheus_reporter_unix.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85open Prometheus module Metrics = struct let namespace = "prometheus" let subsystem = "logs" let inc_messages = let help = "Total number of messages logged" in let c = Counter.v_labels ~label_names:[ "level"; "src" ] ~help ~namespace ~subsystem "messages_total" in fun lvl src -> let lvl = Logs.level_to_string (Some lvl) in Counter.inc_one @@ Counter.labels c [ lvl; src ] end module Unix_runtime = struct let start_time = Unix.gettimeofday () let simple_metric ~metric_type ~help name fn = let info = { MetricInfo. name = MetricName.v name; help; metric_type; label_names = []; } in let collect () = LabelSetMap.singleton [] [Sample_set.sample (fn ())] in info, collect let process_start_time_seconds = simple_metric ~metric_type:Counter "process_start_time_seconds" (fun () -> start_time) ~help:"Start time of the process since unix epoch in seconds." let metrics = [ process_start_time_seconds; ] end let () = let add (info, collector) = CollectorRegistry.(register default) info collector in List.iter add Unix_runtime.metrics module Logging = struct let inc_counter = Metrics.inc_messages let pp_timestamp f x = let open Unix in let tm = localtime x in Fmt.pf f "%04d-%02d-%02d %02d:%02d.%02d" (tm.tm_year + 1900) (tm.tm_mon + 1) tm.tm_mday tm.tm_hour tm.tm_min tm.tm_sec let reporter formatter = let report src level ~over k msgf = let k _ = over (); k () in let src = Logs.Src.name src in Metrics.inc_messages level src; msgf @@ fun ?header ?tags:_ fmt -> Fmt.kpf k formatter ("%a %a %a @[" ^^ fmt ^^ "@]@.") pp_timestamp (Unix.gettimeofday ()) Fmt.(styled `Magenta string) (Printf.sprintf "%14s" src) Logs_fmt.pp_header (level, header) in { Logs.report = report } let set_level (src, level) = let rec aux = function | [] -> Logs.warn (fun f -> f "set_level: logger %S not registered; ignoring" src) | x :: _ when Logs.Src.name x = src -> Logs.Src.set_level x (Some level) | _ :: xs -> aux xs in aux (Logs.Src.list ()) let init ?(default_level=Logs.Info) ?(levels=[]) ?(formatter=Fmt.stderr) () = Fmt_tty.setup_std_outputs (); Logs.set_reporter (reporter formatter); Logs.set_level (Some default_level); List.iter set_level levels end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>