{"record":{"id":"43a395c53c716e58","repo":"databendlabs/databend","slug":"failed-to-get-metrics","errorCode":null,"errorMessage":"Failed to get metrics: {}","messagePattern":"Failed to get metrics: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/binaries/metactl/main.rs","lineNumber":309,"sourceCode":"    }\n\n    async fn get_metrics(&self, args: &MetricsArgs) -> anyhow::Result<()> {\n        let lua_script = format!(\n            r#\"\nlocal admin_client = metactl.new_admin_client(\"{}\")\nlocal metrics, err = admin_client:metrics()\nif err then\n    return nil, err\nend\nprint(metrics)\nreturn metrics, nil\n\"#,\n            args.admin_api_address\n        );\n\n        match lua_support::run_lua_script_with_result(&lua_script).await? {\n            Ok(_result) => Ok(()),\n            Err(error_msg) => Err(anyhow::anyhow!(\"Failed to get metrics: {}\", error_msg)),\n        }\n    }\n\n    async fn member_list(&self, args: &MemberListArgs) -> anyhow::Result<()> {\n        let addresses = vec![args.grpc_api_address.clone()];\n        let client = self.new_grpc_client(addresses)?;\n\n        let res = client.get_member_list().await?;\n        for member in res.data {\n            println!(\"{}\", member);\n        }\n        Ok(())\n    }\n\n    fn new_grpc_client(\n        &self,\n        addresses: Vec<String>,\n    ) -> Result<Arc<ClientHandle<DatabendRuntime>>, CreationError> {","sourceCodeStart":291,"sourceCodeEnd":327,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/meta/binaries/metactl/main.rs#L291-L327","documentation":"databend-metactl's metrics command runs a Lua script that fetches metrics from a metasrv admin API endpoint. If the script's HTTP call fails or returns an error, the error message is wrapped as 'Failed to get metrics: {}'.","triggerScenarios":"Running `metactl ... metrics` when the admin API address is wrong, the node is down, the Lua HTTP request returns non-success, or the response body is not valid metrics output.","commonSituations":"metasrv not running at --admin-api-address; wrong port; network partition; scraping a node whose admin API is disabled or bound differently.","solutions":["Verify the metasrv node is running and the --admin-api-address matches its configured admin_api_address","Curl http://<admin-api-address>/v1/health or the metrics path manually to confirm reachability","Check firewall/DNS between the metactl host and the metasrv node"],"exampleFix":"// before\nmetactl metrics --admin-api-address http://localhost:28002\n// after (correct admin api port from config)\nmetactl metrics --admin-api-address http://localhost:28102","handlingStrategy":"validation","validationCode":"curl -sf http://<admin-api-address>/v1/health && echo ok || echo 'admin api not reachable'","typeGuard":null,"tryCatchPattern":"match metactl_metrics(addr).await {\n    Ok(_) => (),\n    Err(e) if e.to_string().contains(\"Failed to get metrics\") => eprintln!(\"check admin api address: {}\", e),\n    Err(e) => return Err(e),\n}","preventionTips":["Cross-check --admin-api-address against the metasrv config admin_api_address","Health-check the node before running metrics commands","Avoid proxies on the admin API path"],"tags":["metrics","admin-api","metactl"],"backgroundTag":"http-error-response","analyzedSha":"288d84d76e20a2f8f7173bda9691eb6ece301aa9","analyzedAt":"2026-09-11T11:29:36.208Z","contentChangedAt":"2026-09-11T11:29:36.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}