[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-pydantic-logfire-infrastructure":3,"mdc-ewsr1i-key":35,"related-repo-pydantic-logfire-infrastructure":663,"related-org-pydantic-logfire-infrastructure":748},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":33,"mdContent":34},"logfire-infrastructure","monitor infrastructure metrics with Logfire","Monitor hosts, Docker containers, Kubernetes clusters, database\u002Fqueue\u002Fcache servers, and cloud-provider metrics with Pydantic Logfire — no application code required. Use this skill whenever the user asks to \"monitor my host\u002Fserver\u002FVM\", \"monitor my Docker containers\", \"monitor my Kubernetes cluster\", \"send infrastructure metrics to Logfire\", \"watch my database\u002FPostgres\u002FRedis\u002FMongoDB\u002FKafka\", \"collect cloud metrics\" (AWS\u002FGCP), or mentions the OpenTelemetry Collector in the context of Logfire. This is infrastructure only — for instrumenting APPLICATION CODE (traces, logs, AI\u002Fagent spans) use the logfire-instrumentation skill instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"pydantic","Pydantic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fpydantic.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":17,"slug":18,"type":15},"Monitoring","monitoring",{"name":20,"slug":21,"type":15},"Logfire","logfire",{"name":23,"slug":24,"type":15},"Infrastructure","infrastructure",95,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fskills","2026-09-03T07:48:50.066951",null,3,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":28},[],"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Flogfire-infrastructure","---\nname: logfire-infrastructure\ndescription: Monitor hosts, Docker containers, Kubernetes clusters, database\u002Fqueue\u002Fcache servers, and cloud-provider metrics with Pydantic Logfire — no application code required. Use this skill whenever the user asks to \"monitor my host\u002Fserver\u002FVM\", \"monitor my Docker containers\", \"monitor my Kubernetes cluster\", \"send infrastructure metrics to Logfire\", \"watch my database\u002FPostgres\u002FRedis\u002FMongoDB\u002FKafka\", \"collect cloud metrics\" (AWS\u002FGCP), or mentions the OpenTelemetry Collector in the context of Logfire. This is infrastructure only — for instrumenting APPLICATION CODE (traces, logs, AI\u002Fagent spans) use the logfire-instrumentation skill instead.\n---\n\n# Monitor Infrastructure with Logfire\n\nDo **not** use this skill for application-level traces, logs, or AI\u002Fagent spans — that's `logfire-instrumentation`. The two compose: a full setup often runs both.\n\n## How This Works\n\nThe OpenTelemetry Collector ships host, container, cluster, and infrastructure-service metrics to Logfire with **no application code changes** — Logfire is a fully compliant OTel backend and ingests standard OTLP traces, logs, and metrics from it (one narrow exception noted in the [collector reference](.\u002Freferences\u002Fcollector\u002Fhost-and-infra-metrics.md)), so the Collector is the entire mechanism. This is optional and is an advanced tool: if the user only wants their app's own traces, `logfire-instrumentation`'s language SDKs are enough on their own.\n\n## Step 1: Authenticate and Select the Exact Project\n\nDo not open, read, or run any infrastructure config file (`docker-compose.yml`, a Kubernetes manifest, or similar) until `whoami` confirms you're authenticated to the right project — nothing about this step requires knowing what's being monitored. Auth is also the one step that can block on a human (browser sign-in), so starting it first means that wait begins on turn one, not after Step 2's detection work.\n\nCheck first — `uvx logfire --non-interactive whoami` (JS: `npx logfire whoami`) — and skip to Step 2 if it already reports the right project and region. Otherwise, full command sequence, flags, and gotchas (the `--non-interactive` requirement, why `auth` won't open a browser for you, the `LOGFIRE_TOKEN`-vs-credentials-file conflict) plus where the Collector's own write token comes from: [Authenticate and Select the Exact Project](..\u002Flogfire-instrumentation\u002Freferences\u002Fauth.md).\n\n## Step 2: Identify What to Monitor\n\nDetect the infrastructure actually in play, don't assume:\n\n- **Host\u002FVM**: monitoring the machine itself (CPU, memory, disk, network, load).\n- **Docker**: read `docker-compose.yml` \u002F `Dockerfile`s for running containers.\n- **Kubernetes**: look for manifests, a `kubeconfig`, or `kubectl` context.\n- **Database\u002Fqueue\u002Fcache servers**: read `docker-compose.yml` \u002F `pyproject.toml` \u002F `package.json` for Postgres, MySQL, Redis, MongoDB, Kafka, RabbitMQ, Nginx, Apache, Elasticsearch, or Memcached.\n- **Cloud provider**: GCP or AWS metrics (Cloud Monitoring, CloudWatch, ECS), when the user names the provider or the app clearly runs there.\n\nMore than one can apply at once — a single Collector can run multiple receivers in parallel pipelines.\n\n## Step 3: Configure the Collector\n\nFollow the [collector reference](.\u002Freferences\u002Fcollector\u002Fhost-and-infra-metrics.md) for the receiver(s) identified in Step 2 — it covers the shared exporter setup, then a dedicated section per source: host metrics, Docker, Kubernetes, database\u002Fqueue\u002Fcache servers, and cloud-provider metrics, each with the exact receiver name, a working config, and the caveats that actually bite (Docker socket permissions, API version pinning, `host.docker.internal` vs `localhost`, IAM permissions, ADOT vs. Contrib collector images).\n\nSet the same service & resource metadata conventions the [collector reference](.\u002Freferences\u002Fcollector\u002Fhost-and-infra-metrics.md) describes — `host.name`, `service.name`, `service.instance.id` — so data groups correctly across the Hosts, Kubernetes, and Metrics pages.\n\nBefore starting or restarting the Collector, validate the config file — a receiver typo or bad indentation should surface as a validation error, not a Collector that starts, logs nothing useful, and silently drops the pipeline:\n\n```bash\notelcol-contrib validate --config=collector-config.yaml\n# or, for the core (non-Contrib) distribution: otelcol validate --config=...\n```\n\nIf neither binary is on `PATH`, inspect the running Collector container (for example with `kubectl exec`) or use the deployment-specific validation command from the image entrypoint, systemd unit, or Helm chart. `docker compose config` or `kubectl get pod \u003Cname> -o yaml` can show the command when it is explicitly configured.\n\n## Step 4: Verify\n\nWiring a receiver isn't done when the Collector starts cleanly — confirm the data actually reached the right page for the right host\u002Fcontainer\u002Fcluster, not just that something arrived. **Never report a metric as \"arrived\" without having queried for it in this same session** — a plausible-sounding summary that wasn't checked is worse than saying you couldn't verify.\n\n1. **Restart the Collector** after any config change (having validated it, above).\n2. **Query for the exact resource you configured, not just any data on the page.** If a Logfire MCP server or API is connected in this session, query for the specific `host.name` \u002F container \u002F cluster you set in Step 3 within the last few minutes — a query that returns zero rows for that exact identifier means it didn't land, even if the page shows data from something else. Otherwise, open the specific product page — **Hosts**, **Docker**, or **Kubernetes** — or the **Metrics** explorer for database\u002Fqueue\u002Fcache\u002Fcloud sources, and look for that same exact identifier.\n3. **If nothing appears**, check in order: the exporter endpoint\u002Fregion and write token, that the receiver is in an active pipeline (not defined but never referenced under `service.pipelines`), and that resource attributes (`host.name`, `service.name`) are set — the [reference's own Verify section](.\u002Freferences\u002Fcollector\u002Fhost-and-infra-metrics.md) has the full troubleshooting path.\n4. **Fix and re-check** until the specific source is visible, not just \"some\" data.\n\nClose with a final report built from what you just confirmed — org\u002Fproject\u002Fregion from `whoami`, which receiver(s) are active, and the exact host\u002Fcontainer\u002Fcluster identifier you verified — not a template. **Include a direct link to the relevant view** (`\u002Fhosts`, `\u002Fdocker`, `\u002Fkubernetes`, or `\u002Fmetrics`, based on the source) using the project's URL from `whoami`, so the user can see their own source arrive without having to ask where to look. A report with a placeholder in it means a step above was skipped, not finished.\n\n## References\n\n- [Host, Docker, Kubernetes, database\u002Fqueue\u002Fcache, and cloud-provider metrics via the OTel Collector](.\u002Freferences\u002Fcollector\u002Fhost-and-infra-metrics.md) — receiver configs, IAM\u002Fpermission caveats, and its own verify loop.\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,49,72,79,107,113,134,187,193,198,304,309,315,342,376,381,425,462,468,480,583,638,644,657],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"monitor-infrastructure-with-logfire",[46],{"type":47,"value":48},"text","Monitor Infrastructure with Logfire",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53,55,61,63,70],{"type":47,"value":54},"Do ",{"type":41,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":47,"value":60},"not",{"type":47,"value":62}," use this skill for application-level traces, logs, or AI\u002Fagent spans — that's ",{"type":41,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":47,"value":69},"logfire-instrumentation",{"type":47,"value":71},". The two compose: a full setup often runs both.",{"type":41,"tag":73,"props":74,"children":76},"h2",{"id":75},"how-this-works",[77],{"type":47,"value":78},"How This Works",{"type":41,"tag":50,"props":80,"children":81},{},[82,84,89,91,98,100,105],{"type":47,"value":83},"The OpenTelemetry Collector ships host, container, cluster, and infrastructure-service metrics to Logfire with ",{"type":41,"tag":56,"props":85,"children":86},{},[87],{"type":47,"value":88},"no application code changes",{"type":47,"value":90}," — Logfire is a fully compliant OTel backend and ingests standard OTLP traces, logs, and metrics from it (one narrow exception noted in the ",{"type":41,"tag":92,"props":93,"children":95},"a",{"href":94},".\u002Freferences\u002Fcollector\u002Fhost-and-infra-metrics.md",[96],{"type":47,"value":97},"collector reference",{"type":47,"value":99},"), so the Collector is the entire mechanism. This is optional and is an advanced tool: if the user only wants their app's own traces, ",{"type":41,"tag":64,"props":101,"children":103},{"className":102},[],[104],{"type":47,"value":69},{"type":47,"value":106},"'s language SDKs are enough on their own.",{"type":41,"tag":73,"props":108,"children":110},{"id":109},"step-1-authenticate-and-select-the-exact-project",[111],{"type":47,"value":112},"Step 1: Authenticate and Select the Exact Project",{"type":41,"tag":50,"props":114,"children":115},{},[116,118,124,126,132],{"type":47,"value":117},"Do not open, read, or run any infrastructure config file (",{"type":41,"tag":64,"props":119,"children":121},{"className":120},[],[122],{"type":47,"value":123},"docker-compose.yml",{"type":47,"value":125},", a Kubernetes manifest, or similar) until ",{"type":41,"tag":64,"props":127,"children":129},{"className":128},[],[130],{"type":47,"value":131},"whoami",{"type":47,"value":133}," confirms you're authenticated to the right project — nothing about this step requires knowing what's being monitored. Auth is also the one step that can block on a human (browser sign-in), so starting it first means that wait begins on turn one, not after Step 2's detection work.",{"type":41,"tag":50,"props":135,"children":136},{},[137,139,145,147,153,155,161,163,169,171,177,179,185],{"type":47,"value":138},"Check first — ",{"type":41,"tag":64,"props":140,"children":142},{"className":141},[],[143],{"type":47,"value":144},"uvx logfire --non-interactive whoami",{"type":47,"value":146}," (JS: ",{"type":41,"tag":64,"props":148,"children":150},{"className":149},[],[151],{"type":47,"value":152},"npx logfire whoami",{"type":47,"value":154},") — and skip to Step 2 if it already reports the right project and region. Otherwise, full command sequence, flags, and gotchas (the ",{"type":41,"tag":64,"props":156,"children":158},{"className":157},[],[159],{"type":47,"value":160},"--non-interactive",{"type":47,"value":162}," requirement, why ",{"type":41,"tag":64,"props":164,"children":166},{"className":165},[],[167],{"type":47,"value":168},"auth",{"type":47,"value":170}," won't open a browser for you, the ",{"type":41,"tag":64,"props":172,"children":174},{"className":173},[],[175],{"type":47,"value":176},"LOGFIRE_TOKEN",{"type":47,"value":178},"-vs-credentials-file conflict) plus where the Collector's own write token comes from: ",{"type":41,"tag":92,"props":180,"children":182},{"href":181},"..\u002Flogfire-instrumentation\u002Freferences\u002Fauth.md",[183],{"type":47,"value":184},"Authenticate and Select the Exact Project",{"type":47,"value":186},".",{"type":41,"tag":73,"props":188,"children":190},{"id":189},"step-2-identify-what-to-monitor",[191],{"type":47,"value":192},"Step 2: Identify What to Monitor",{"type":41,"tag":50,"props":194,"children":195},{},[196],{"type":47,"value":197},"Detect the infrastructure actually in play, don't assume:",{"type":41,"tag":199,"props":200,"children":201},"ul",{},[202,213,238,264,294],{"type":41,"tag":203,"props":204,"children":205},"li",{},[206,211],{"type":41,"tag":56,"props":207,"children":208},{},[209],{"type":47,"value":210},"Host\u002FVM",{"type":47,"value":212},": monitoring the machine itself (CPU, memory, disk, network, load).",{"type":41,"tag":203,"props":214,"children":215},{},[216,221,223,228,230,236],{"type":41,"tag":56,"props":217,"children":218},{},[219],{"type":47,"value":220},"Docker",{"type":47,"value":222},": read ",{"type":41,"tag":64,"props":224,"children":226},{"className":225},[],[227],{"type":47,"value":123},{"type":47,"value":229}," \u002F ",{"type":41,"tag":64,"props":231,"children":233},{"className":232},[],[234],{"type":47,"value":235},"Dockerfile",{"type":47,"value":237},"s for running containers.",{"type":41,"tag":203,"props":239,"children":240},{},[241,246,248,254,256,262],{"type":41,"tag":56,"props":242,"children":243},{},[244],{"type":47,"value":245},"Kubernetes",{"type":47,"value":247},": look for manifests, a ",{"type":41,"tag":64,"props":249,"children":251},{"className":250},[],[252],{"type":47,"value":253},"kubeconfig",{"type":47,"value":255},", or ",{"type":41,"tag":64,"props":257,"children":259},{"className":258},[],[260],{"type":47,"value":261},"kubectl",{"type":47,"value":263}," context.",{"type":41,"tag":203,"props":265,"children":266},{},[267,272,273,278,279,285,286,292],{"type":41,"tag":56,"props":268,"children":269},{},[270],{"type":47,"value":271},"Database\u002Fqueue\u002Fcache servers",{"type":47,"value":222},{"type":41,"tag":64,"props":274,"children":276},{"className":275},[],[277],{"type":47,"value":123},{"type":47,"value":229},{"type":41,"tag":64,"props":280,"children":282},{"className":281},[],[283],{"type":47,"value":284},"pyproject.toml",{"type":47,"value":229},{"type":41,"tag":64,"props":287,"children":289},{"className":288},[],[290],{"type":47,"value":291},"package.json",{"type":47,"value":293}," for Postgres, MySQL, Redis, MongoDB, Kafka, RabbitMQ, Nginx, Apache, Elasticsearch, or Memcached.",{"type":41,"tag":203,"props":295,"children":296},{},[297,302],{"type":41,"tag":56,"props":298,"children":299},{},[300],{"type":47,"value":301},"Cloud provider",{"type":47,"value":303},": GCP or AWS metrics (Cloud Monitoring, CloudWatch, ECS), when the user names the provider or the app clearly runs there.",{"type":41,"tag":50,"props":305,"children":306},{},[307],{"type":47,"value":308},"More than one can apply at once — a single Collector can run multiple receivers in parallel pipelines.",{"type":41,"tag":73,"props":310,"children":312},{"id":311},"step-3-configure-the-collector",[313],{"type":47,"value":314},"Step 3: Configure the Collector",{"type":41,"tag":50,"props":316,"children":317},{},[318,320,324,326,332,334,340],{"type":47,"value":319},"Follow the ",{"type":41,"tag":92,"props":321,"children":322},{"href":94},[323],{"type":47,"value":97},{"type":47,"value":325}," for the receiver(s) identified in Step 2 — it covers the shared exporter setup, then a dedicated section per source: host metrics, Docker, Kubernetes, database\u002Fqueue\u002Fcache servers, and cloud-provider metrics, each with the exact receiver name, a working config, and the caveats that actually bite (Docker socket permissions, API version pinning, ",{"type":41,"tag":64,"props":327,"children":329},{"className":328},[],[330],{"type":47,"value":331},"host.docker.internal",{"type":47,"value":333}," vs ",{"type":41,"tag":64,"props":335,"children":337},{"className":336},[],[338],{"type":47,"value":339},"localhost",{"type":47,"value":341},", IAM permissions, ADOT vs. Contrib collector images).",{"type":41,"tag":50,"props":343,"children":344},{},[345,347,351,353,359,361,367,368,374],{"type":47,"value":346},"Set the same service & resource metadata conventions the ",{"type":41,"tag":92,"props":348,"children":349},{"href":94},[350],{"type":47,"value":97},{"type":47,"value":352}," describes — ",{"type":41,"tag":64,"props":354,"children":356},{"className":355},[],[357],{"type":47,"value":358},"host.name",{"type":47,"value":360},", ",{"type":41,"tag":64,"props":362,"children":364},{"className":363},[],[365],{"type":47,"value":366},"service.name",{"type":47,"value":360},{"type":41,"tag":64,"props":369,"children":371},{"className":370},[],[372],{"type":47,"value":373},"service.instance.id",{"type":47,"value":375}," — so data groups correctly across the Hosts, Kubernetes, and Metrics pages.",{"type":41,"tag":50,"props":377,"children":378},{},[379],{"type":47,"value":380},"Before starting or restarting the Collector, validate the config file — a receiver typo or bad indentation should surface as a validation error, not a Collector that starts, logs nothing useful, and silently drops the pipeline:",{"type":41,"tag":382,"props":383,"children":388},"pre",{"className":384,"code":385,"language":386,"meta":387,"style":387},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","otelcol-contrib validate --config=collector-config.yaml\n# or, for the core (non-Contrib) distribution: otelcol validate --config=...\n","bash","",[389],{"type":41,"tag":64,"props":390,"children":391},{"__ignoreMap":387},[392,415],{"type":41,"tag":393,"props":394,"children":397},"span",{"class":395,"line":396},"line",1,[398,404,410],{"type":41,"tag":393,"props":399,"children":401},{"style":400},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[402],{"type":47,"value":403},"otelcol-contrib",{"type":41,"tag":393,"props":405,"children":407},{"style":406},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[408],{"type":47,"value":409}," validate",{"type":41,"tag":393,"props":411,"children":412},{"style":406},[413],{"type":47,"value":414}," --config=collector-config.yaml\n",{"type":41,"tag":393,"props":416,"children":418},{"class":395,"line":417},2,[419],{"type":41,"tag":393,"props":420,"children":422},{"style":421},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[423],{"type":47,"value":424},"# or, for the core (non-Contrib) distribution: otelcol validate --config=...\n",{"type":41,"tag":50,"props":426,"children":427},{},[428,430,436,438,444,446,452,454,460],{"type":47,"value":429},"If neither binary is on ",{"type":41,"tag":64,"props":431,"children":433},{"className":432},[],[434],{"type":47,"value":435},"PATH",{"type":47,"value":437},", inspect the running Collector container (for example with ",{"type":41,"tag":64,"props":439,"children":441},{"className":440},[],[442],{"type":47,"value":443},"kubectl exec",{"type":47,"value":445},") or use the deployment-specific validation command from the image entrypoint, systemd unit, or Helm chart. ",{"type":41,"tag":64,"props":447,"children":449},{"className":448},[],[450],{"type":47,"value":451},"docker compose config",{"type":47,"value":453}," or ",{"type":41,"tag":64,"props":455,"children":457},{"className":456},[],[458],{"type":47,"value":459},"kubectl get pod \u003Cname> -o yaml",{"type":47,"value":461}," can show the command when it is explicitly configured.",{"type":41,"tag":73,"props":463,"children":465},{"id":464},"step-4-verify",[466],{"type":47,"value":467},"Step 4: Verify",{"type":41,"tag":50,"props":469,"children":470},{},[471,473,478],{"type":47,"value":472},"Wiring a receiver isn't done when the Collector starts cleanly — confirm the data actually reached the right page for the right host\u002Fcontainer\u002Fcluster, not just that something arrived. ",{"type":41,"tag":56,"props":474,"children":475},{},[476],{"type":47,"value":477},"Never report a metric as \"arrived\" without having queried for it in this same session",{"type":47,"value":479}," — a plausible-sounding summary that wasn't checked is worse than saying you couldn't verify.",{"type":41,"tag":481,"props":482,"children":483},"ol",{},[484,494,535,573],{"type":41,"tag":203,"props":485,"children":486},{},[487,492],{"type":41,"tag":56,"props":488,"children":489},{},[490],{"type":47,"value":491},"Restart the Collector",{"type":47,"value":493}," after any config change (having validated it, above).",{"type":41,"tag":203,"props":495,"children":496},{},[497,502,504,509,511,516,517,521,522,526,528,533],{"type":41,"tag":56,"props":498,"children":499},{},[500],{"type":47,"value":501},"Query for the exact resource you configured, not just any data on the page.",{"type":47,"value":503}," If a Logfire MCP server or API is connected in this session, query for the specific ",{"type":41,"tag":64,"props":505,"children":507},{"className":506},[],[508],{"type":47,"value":358},{"type":47,"value":510}," \u002F container \u002F cluster you set in Step 3 within the last few minutes — a query that returns zero rows for that exact identifier means it didn't land, even if the page shows data from something else. Otherwise, open the specific product page — ",{"type":41,"tag":56,"props":512,"children":513},{},[514],{"type":47,"value":515},"Hosts",{"type":47,"value":360},{"type":41,"tag":56,"props":518,"children":519},{},[520],{"type":47,"value":220},{"type":47,"value":255},{"type":41,"tag":56,"props":523,"children":524},{},[525],{"type":47,"value":245},{"type":47,"value":527}," — or the ",{"type":41,"tag":56,"props":529,"children":530},{},[531],{"type":47,"value":532},"Metrics",{"type":47,"value":534}," explorer for database\u002Fqueue\u002Fcache\u002Fcloud sources, and look for that same exact identifier.",{"type":41,"tag":203,"props":536,"children":537},{},[538,543,545,551,553,558,559,564,566,571],{"type":41,"tag":56,"props":539,"children":540},{},[541],{"type":47,"value":542},"If nothing appears",{"type":47,"value":544},", check in order: the exporter endpoint\u002Fregion and write token, that the receiver is in an active pipeline (not defined but never referenced under ",{"type":41,"tag":64,"props":546,"children":548},{"className":547},[],[549],{"type":47,"value":550},"service.pipelines",{"type":47,"value":552},"), and that resource attributes (",{"type":41,"tag":64,"props":554,"children":556},{"className":555},[],[557],{"type":47,"value":358},{"type":47,"value":360},{"type":41,"tag":64,"props":560,"children":562},{"className":561},[],[563],{"type":47,"value":366},{"type":47,"value":565},") are set — the ",{"type":41,"tag":92,"props":567,"children":568},{"href":94},[569],{"type":47,"value":570},"reference's own Verify section",{"type":47,"value":572}," has the full troubleshooting path.",{"type":41,"tag":203,"props":574,"children":575},{},[576,581],{"type":41,"tag":56,"props":577,"children":578},{},[579],{"type":47,"value":580},"Fix and re-check",{"type":47,"value":582}," until the specific source is visible, not just \"some\" data.",{"type":41,"tag":50,"props":584,"children":585},{},[586,588,593,595,600,602,608,609,615,616,622,623,629,631,636],{"type":47,"value":587},"Close with a final report built from what you just confirmed — org\u002Fproject\u002Fregion from ",{"type":41,"tag":64,"props":589,"children":591},{"className":590},[],[592],{"type":47,"value":131},{"type":47,"value":594},", which receiver(s) are active, and the exact host\u002Fcontainer\u002Fcluster identifier you verified — not a template. ",{"type":41,"tag":56,"props":596,"children":597},{},[598],{"type":47,"value":599},"Include a direct link to the relevant view",{"type":47,"value":601}," (",{"type":41,"tag":64,"props":603,"children":605},{"className":604},[],[606],{"type":47,"value":607},"\u002Fhosts",{"type":47,"value":360},{"type":41,"tag":64,"props":610,"children":612},{"className":611},[],[613],{"type":47,"value":614},"\u002Fdocker",{"type":47,"value":360},{"type":41,"tag":64,"props":617,"children":619},{"className":618},[],[620],{"type":47,"value":621},"\u002Fkubernetes",{"type":47,"value":255},{"type":41,"tag":64,"props":624,"children":626},{"className":625},[],[627],{"type":47,"value":628},"\u002Fmetrics",{"type":47,"value":630},", based on the source) using the project's URL from ",{"type":41,"tag":64,"props":632,"children":634},{"className":633},[],[635],{"type":47,"value":131},{"type":47,"value":637},", so the user can see their own source arrive without having to ask where to look. A report with a placeholder in it means a step above was skipped, not finished.",{"type":41,"tag":73,"props":639,"children":641},{"id":640},"references",[642],{"type":47,"value":643},"References",{"type":41,"tag":199,"props":645,"children":646},{},[647],{"type":41,"tag":203,"props":648,"children":649},{},[650,655],{"type":41,"tag":92,"props":651,"children":652},{"href":94},[653],{"type":47,"value":654},"Host, Docker, Kubernetes, database\u002Fqueue\u002Fcache, and cloud-provider metrics via the OTel Collector",{"type":47,"value":656}," — receiver configs, IAM\u002Fpermission caveats, and its own verify loop.",{"type":41,"tag":658,"props":659,"children":660},"style",{},[661],{"type":47,"value":662},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":664,"total":747},[665,682,695,702,714,727,737],{"slug":666,"name":666,"fn":667,"description":668,"org":669,"tags":670,"stars":25,"repoUrl":26,"updatedAt":681},"building-pydantic-ai-agents","build AI agents with Pydantic AI","Build AI agents with Pydantic AI — tools, capabilities (including on-demand loading), structured output, streaming, testing, and multi-agent patterns. Use when the user mentions Pydantic AI, imports pydantic_ai, or asks to build an AI agent, add tools\u002Fcapabilities, defer capability loading, stream output, define agents from YAML, or test agent behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[671,674,677,678],{"name":672,"slug":673,"type":15},"Agents","agents",{"name":675,"slug":676,"type":15},"LLM","llm",{"name":9,"slug":8,"type":15},{"name":679,"slug":680,"type":15},"Python","python","2026-08-05T05:36:25.389247",{"slug":683,"name":683,"fn":684,"description":685,"org":686,"tags":687,"stars":25,"repoUrl":26,"updatedAt":694},"logfire-evals","evaluate Python agent code with Logfire","Evaluate Python AI\u002Fagent code against a dataset of test cases using pydantic_evals, and review results in Logfire's Datasets & Experiments UI. Also covers redirecting an existing Braintrust Eval() suite to Logfire with no code changes. Use this skill whenever the user asks to \"set up evals\", \"add an evaluation\", \"test my agent against cases\", \"write a dataset of test cases\", \"score my LLM output\", \"add an LLM judge\", \"check tool-call correctness\", \"send Braintrust evals to Logfire\", \"migrate from Braintrust\", or mentions pydantic_evals, Braintrust, Datasets & Experiments, or evaluating AI\u002Fagent behavior against known inputs. The `pydantic_evals` workflow is Python-only; the Braintrust redirect also supports TypeScript suites, env-vars-only. Both are for scoring DEFINED test cases offline — not for instrumenting live production traffic (use `logfire-instrumentation` for that) and not for infrastructure monitoring (use `logfire-infrastructure`).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[688,691,692,693],{"name":689,"slug":690,"type":15},"Evals","evals",{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":679,"slug":680,"type":15},"2026-09-03T07:48:42.409632",{"slug":4,"name":4,"fn":5,"description":6,"org":696,"tags":697,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[698,699,700,701],{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":69,"name":69,"fn":703,"description":704,"org":705,"tags":706,"stars":25,"repoUrl":26,"updatedAt":713},"instrument applications with Pydantic Logfire","Add Pydantic Logfire observability to application code — traces, logs, metrics, and AI\u002Fagent spans. Use when the user asks to add or configure Logfire, observability, tracing, logging, or monitoring; maximize useful telemetry; or understand what an app is doing. Supports Python, JavaScript\u002FTypeScript, Rust, and major AI agent frameworks including Pydantic AI, OpenAI Agents SDK, Claude Agent SDK, LangChain, LangGraph, CrewAI, AutoGen, and Google ADK. For infrastructure-only monitoring (hosts, Docker, Kubernetes, databases, or cloud metrics with no app-code changes), use `logfire-infrastructure`. For evaluating AI\u002Fagent behavior against test datasets, use `logfire-evals`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[707,710,711,712],{"name":708,"slug":709,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},"2026-09-03T07:26:53.684135",{"slug":715,"name":715,"fn":716,"description":717,"org":718,"tags":719,"stars":25,"repoUrl":26,"updatedAt":726},"logfire-query","query and analyze Logfire telemetry","Query and analyze Logfire telemetry data — traces, logs, spans, metrics, summaries, and SQL results. Use this skill when the user asks to \"query logfire\", \"search traces\", \"find logs\", \"query data\", \"search spans\", \"look up errors in logfire\", \"get metrics from logfire\", \"analyze telemetry\", \"summarize errors\", \"find root cause\", or add Logfire querying capabilities to code. Do not use this skill for direct Logfire UI, browser, live-view, Explore-page, or link-opening requests; use logfire-ui instead. If \"show\" or \"view\" wording is ambiguous, ask whether the user wants a UI view or query analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[720,723,724,725],{"name":721,"slug":722,"type":15},"Data Analysis","data-analysis",{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},"2026-07-16T05:59:18.201951",{"slug":728,"name":728,"fn":729,"description":730,"org":731,"tags":732,"stars":25,"repoUrl":26,"updatedAt":736},"logfire-setup","set up Pydantic Logfire observability","Entry point for Pydantic Logfire — an observability, monitoring, and evals platform. Use this skill when the user asks to \"set up Logfire\", \"add Logfire to my project\", \"get me set up properly with Logfire\", \"send as much data as would be useful\", mentions Logfire without a specific scope, or their request spans more than one of instrumenting application code \u002F monitoring infrastructure \u002F evaluating AI behavior. If the request is clearly scoped to exactly one of those, fetch that specific skill directly instead of this one — this skill exists to route, not to duplicate their content.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[733,734,735],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},"2026-09-03T07:48:43.034559",{"slug":738,"name":738,"fn":739,"description":740,"org":741,"tags":742,"stars":25,"repoUrl":26,"updatedAt":746},"logfire-ui","navigate Logfire project pages","Open or return Logfire project pages, live views, trace links, and Explore pages in the Codex browser without querying telemetry first. Use this skill when the user asks to \"open in Logfire\", \"show in the live view\", \"open Explore\", \"open the UI\", \"show in Codex\", \"use the browser\", \"give me a link\", or asks for a Logfire GUI\u002Fbrowser\u002Flive-view presentation of a project, time range, service, span, trace, log, or filter. If \"show\" or \"view\" wording is ambiguous, ask whether the user wants a UI view or query analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[743,744,745],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},"2026-07-16T05:59:17.66486",9,{"items":749,"total":747},[750,757,764,771,778,785,791,797,811],{"slug":666,"name":666,"fn":667,"description":668,"org":751,"tags":752,"stars":25,"repoUrl":26,"updatedAt":681},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[753,754,755,756],{"name":672,"slug":673,"type":15},{"name":675,"slug":676,"type":15},{"name":9,"slug":8,"type":15},{"name":679,"slug":680,"type":15},{"slug":683,"name":683,"fn":684,"description":685,"org":758,"tags":759,"stars":25,"repoUrl":26,"updatedAt":694},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[760,761,762,763],{"name":689,"slug":690,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":679,"slug":680,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":765,"tags":766,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[767,768,769,770],{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":69,"name":69,"fn":703,"description":704,"org":772,"tags":773,"stars":25,"repoUrl":26,"updatedAt":713},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[774,775,776,777],{"name":708,"slug":709,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":715,"name":715,"fn":716,"description":717,"org":779,"tags":780,"stars":25,"repoUrl":26,"updatedAt":726},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[781,782,783,784],{"name":721,"slug":722,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":728,"name":728,"fn":729,"description":730,"org":786,"tags":787,"stars":25,"repoUrl":26,"updatedAt":736},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[788,789,790],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":738,"name":738,"fn":739,"description":740,"org":792,"tags":793,"stars":25,"repoUrl":26,"updatedAt":746},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[794,795,796],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":8,"name":8,"fn":798,"description":799,"org":800,"tags":801,"stars":25,"repoUrl":26,"updatedAt":810},"model and validate data with Pydantic","Pydantic is a Python data validation and serialization library, based on type hints. Use this skill whenever you need to do relatively complex data modeling using Pydantic, e.g. when adding constraints, defining a model hierarchy with subclasses, etc.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[802,805,806,807],{"name":803,"slug":804,"type":15},"Data Modeling","data-modeling",{"name":9,"slug":8,"type":15},{"name":679,"slug":680,"type":15},{"name":808,"slug":809,"type":15},"Validation","validation","2026-07-23T06:05:52.745966",{"slug":812,"name":812,"fn":813,"description":814,"org":815,"tags":816,"stars":25,"repoUrl":26,"updatedAt":823},"pydantic-ai-harness","extend Pydantic AI agents with capabilities","Extend Pydantic AI agents with batteries-included capabilities from pydantic-ai-harness -- Code Mode (collapse many tool calls into one sandboxed Python execution), a filesystem and shell, sub-agents, planning, context compaction, and more. Use when the user mentions pydantic-ai-harness, CodeMode, Monty, code mode, or tool sandboxing, when they want first-party filesystem\u002Fshell\u002Fsub-agent\u002Fplanning\u002Fcompaction capabilities for a Pydantic AI agent, when they want an agent to run agent-written Python, or when a Pydantic AI agent would benefit from orchestrating multiple tool calls in a single sandboxed script.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[817,818,821,822],{"name":672,"slug":673,"type":15},{"name":819,"slug":820,"type":15},"Code Execution","code-execution",{"name":9,"slug":8,"type":15},{"name":679,"slug":680,"type":15},"2026-07-30T05:28:54.443013"]