{"adoption": {"forks": 392, "observed_at": "2026-08-28T04:08:32.674886+00:00", "stars": 4027}, "canonical_url": "https://ross.abutalabs.com/products/mtail", "card": {"archived": false, "artifact_type": "service", "description": "extract internal monitoring data from application logs for collection in a timeseries database", "domain": ["monitoring", "developer-tools"], "enriched": true, "function": ["monitoring", "logging", "parser"], "health_score": 72, "homepage": null, "language": "Go", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["google/mtail"], "name": "google/mtail", "platform": ["windows", "go", "cli", "self-hosted"], "pushed_at": "2026-03-19T00:00:37+00:00", "repo": "google/mtail", "stars": 4027, "tags": ["log-metrics-extraction", "prometheus-exporter", "timeseries", "log-parsing", "mtail-programs", "statsd", "graphite", "collectd", "devops", "linux", "macos"], "topics": ["monitoring", "logs", "observability", "prometheus", "collector", "proxy", "metrics", "go", "extraction", "mtail", "calculator", "vm", "compiler", "bytecode", "mtail-programs", "timeseries", "instrumentation"], "urls": [], "use_cases": ["extract prometheus metrics from application logs", "monitor log files and export counters and gauges", "instrument legacy apps that only write logs", "parse log lines into timeseries metrics for alerting", "tail logs and push metrics to statsd or graphite", "build dashboards from unstructured log data"], "what_it_is": "mtail is a Google open-source tool that extracts metrics from application logs using small pattern-action programs and exports them to timeseries databases. It bridges applications that only expose state via logs with monitoring systems like Prometheus, StatsD, Graphite, and collectd.", "when_to_avoid": ["your application can export metrics natively (e.g. a Prometheus client library)", "you need full log aggregation and search rather than metric extraction", "you need structured JSON log ingestion at high throughput — a log pipeline like Vector or Fluent Bit may fit better"], "when_to_choose": ["your application only exposes internal state through logs and you can't patch it", "you already run Prometheus or a timeseries database and need a log-to-metrics bridge", "you want declarative pattern-based extraction instead of custom parsing scripts"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mtail", "repo": "google/mtail", "role": "main", "score": 55}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:32.674886+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:23:53.012517+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9c7741a48f60e223a16cafb76a586529c700966a9c001fa1ea3da5c69e2a50d", "fetched_at": "2026-08-28T04:08:32.674886+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/mtail"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 72, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4481, "days_push": 168, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 55, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}