[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-719df39c-32be-4656-a1dc-c3751002ca46":3,"$fna6Dlxhjap4PpGA3yvwepPWc1wnBUhkgVSAytqpUhEw":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"719df39c-32be-4656-a1dc-c3751002ca46","azure-monitor-ingestion-java","Azure Monitor Java SDK。通过数据收集规则（DCR）和数据收集端点（DCE）将自定义日志发送到Azure Monitor。","cat_coding_devops","mod_coding","sickn33,coding","---\nname: azure-monitor-ingestion-java\ndescription: Azure Monitor Ingestion SDK for Java. Send custom logs to Azure Monitor via Data Collection Rules (DCR) and Data Collection Endpoints (DCE).\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure Monitor Ingestion SDK for Java\n\nClient library for sending custom logs to Azure Monitor using the Logs Ingestion API via Data Collection Rules.\n\n## Installation\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-monitor-ingestion\u003C\u002FartifactId>\n    \u003Cversion>1.2.11\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\nOr use Azure SDK BOM:\n\n```xml\n\u003CdependencyManagement>\n    \u003Cdependencies>\n        \u003Cdependency>\n            \u003CgroupId>com.azure\u003C\u002FgroupId>\n            \u003CartifactId>azure-sdk-bom\u003C\u002FartifactId>\n            \u003Cversion>{bom_version}\u003C\u002Fversion>\n            \u003Ctype>pom\u003C\u002Ftype>\n            \u003Cscope>import\u003C\u002Fscope>\n        \u003C\u002Fdependency>\n    \u003C\u002Fdependencies>\n\u003C\u002FdependencyManagement>\n\n\u003Cdependencies>\n    \u003Cdependency>\n        \u003CgroupId>com.azure\u003C\u002FgroupId>\n        \u003CartifactId>azure-monitor-ingestion\u003C\u002FartifactId>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n```\n\n## Prerequisites\n\n- Data Collection Endpoint (DCE)\n- Data Collection Rule (DCR)\n- Log Analytics workspace\n- Target table (custom or built-in: CommonSecurityLog, SecurityEvents, Syslog, WindowsEvents)\n\n## Environment Variables\n\n```bash\nDATA_COLLECTION_ENDPOINT=https:\u002F\u002F\u003Cdce-name>.\u003Cregion>.ingest.monitor.azure.com\nDATA_COLLECTION_RULE_ID=dcr-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nSTREAM_NAME=Custom-MyTable_CL\n```\n\n## Client Creation\n\n### Synchronous Client\n\n```java\nimport com.azure.identity.DefaultAzureCredential;\nimport com.azure.identity.DefaultAzureCredentialBuilder;\nimport com.azure.monitor.ingestion.LogsIngestionClient;\nimport com.azure.monitor.ingestion.LogsIngestionClientBuilder;\n\nDefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();\n\nLogsIngestionClient client = new LogsIngestionClientBuilder()\n    .endpoint(\"\u003Cdata-collection-endpoint>\")\n    .credential(credential)\n    .buildClient();\n```\n\n### Asynchronous Client\n\n```java\nimport com.azure.monitor.ingestion.LogsIngestionAsyncClient;\n\nLogsIngestionAsyncClient asyncClient = new LogsIngestionClientBuilder()\n    .endpoint(\"\u003Cdata-collection-endpoint>\")\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .buildAsyncClient();\n```\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| Data Collection Endpoint (DCE) | Ingestion endpoint URL for your region |\n| Data Collection Rule (DCR) | Defines data transformation and routing to tables |\n| Stream Name | Target stream in the DCR (e.g., `Custom-MyTable_CL`) |\n| Log Analytics Workspace | Destination for ingested logs |\n\n## Core Operations\n\n### Upload Custom Logs\n\n```java\nimport java.util.List;\nimport java.util.ArrayList;\n\nList\u003CObject> logs = new ArrayList\u003C>();\nlogs.add(new MyLogEntry(\"2024-01-15T10:30:00Z\", \"INFO\", \"Application started\"));\nlogs.add(new MyLogEntry(\"2024-01-15T10:30:05Z\", \"DEBUG\", \"Processing request\"));\n\nclient.upload(\"\u003Cdata-collection-rule-id>\", \"\u003Cstream-name>\", logs);\nSystem.out.println(\"Logs uploaded successfully\");\n```\n\n### Upload with Concurrency\n\nFor large log collections, enable concurrent uploads:\n\n```java\nimport com.azure.monitor.ingestion.models.LogsUploadOptions;\nimport com.azure.core.util.Context;\n\nList\u003CObject> logs = getLargeLogs(); \u002F\u002F Large collection\n\nLogsUploadOptions options = new LogsUploadOptions()\n    .setMaxConcurrency(3);\n\nclient.upload(\"\u003Cdata-collection-rule-id>\", \"\u003Cstream-name>\", logs, options, Context.NONE);\n```\n\n### Upload with Error Handling\n\nHandle partial upload failures gracefully:\n\n```java\nLogsUploadOptions options = new LogsUploadOptions()\n    .setLogsUploadErrorConsumer(uploadError -> {\n        System.err.println(\"Upload error: \" + uploadError.getResponseException().getMessage());\n        System.err.println(\"Failed logs count: \" + uploadError.getFailedLogs().size());\n        \n        \u002F\u002F Option 1: Log and continue\n        \u002F\u002F Option 2: Throw to abort remaining uploads\n        \u002F\u002F throw uploadError.getResponseException();\n    });\n\nclient.upload(\"\u003Cdata-collection-rule-id>\", \"\u003Cstream-name>\", logs, options, Context.NONE);\n```\n\n### Async Upload with Reactor\n\n```java\nimport reactor.core.publisher.Mono;\n\nList\u003CObject> logs = getLogs();\n\nasyncClient.upload(\"\u003Cdata-collection-rule-id>\", \"\u003Cstream-name>\", logs)\n    .doOnSuccess(v -> System.out.println(\"Upload completed\"))\n    .doOnError(e -> System.err.println(\"Upload failed: \" + e.getMessage()))\n    .subscribe();\n```\n\n## Log Entry Model Example\n\n```java\npublic class MyLogEntry {\n    private String timeGenerated;\n    private String level;\n    private String message;\n    \n    public MyLogEntry(String timeGenerated, String level, String message) {\n        this.timeGenerated = timeGenerated;\n        this.level = level;\n        this.message = message;\n    }\n    \n    \u002F\u002F Getters required for JSON serialization\n    public String getTimeGenerated() { return timeGenerated; }\n    public String getLevel() { return level; }\n    public String getMessage() { return message; }\n}\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    client.upload(ruleId, streamName, logs);\n} catch (HttpResponseException e) {\n    System.err.println(\"HTTP Status: \" + e.getResponse().getStatusCode());\n    System.err.println(\"Error: \" + e.getMessage());\n    \n    if (e.getResponse().getStatusCode() == 403) {\n        System.err.println(\"Check DCR permissions and managed identity\");\n    } else if (e.getResponse().getStatusCode() == 404) {\n        System.err.println(\"Verify DCE endpoint and DCR ID\");\n    }\n}\n```\n\n## Best Practices\n\n1. **Batch logs** — Upload in batches rather than one at a time\n2. **Use concurrency** — Set `maxConcurrency` for large uploads\n3. **Handle partial failures** — Use error consumer to log failed entries\n4. **Match DCR schema** — Log entry fields must match DCR transformation expectations\n5. **Include TimeGenerated** — Most tables require a timestamp field\n6. **Reuse client** — Create once, reuse throughout application\n7. **Use async for high throughput** — `LogsIngestionAsyncClient` for reactive patterns\n\n## Querying Uploaded Logs\n\nUse azure-monitor-query to query ingested logs:\n\n```java\n\u002F\u002F See azure-monitor-query skill for LogsQueryClient usage\nString query = \"MyTable_CL | where TimeGenerated > ago(1h) | limit 10\";\n```\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| Maven Package | https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.azure\u002Fazure-monitor-ingestion |\n| GitHub | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Ftree\u002Fmain\u002Fsdk\u002Fmonitor\u002Fazure-monitor-ingestion |\n| Product Docs | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fazure-monitor\u002Flogs\u002Flogs-ingestion-api-overview |\n| DCE Overview | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fazure-monitor\u002Fessentials\u002Fdata-collection-endpoint-overview |\n| DCR Overview | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fazure-monitor\u002Fessentials\u002Fdata-collection-rule-overview |\n| Troubleshooting | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Fblob\u002Fmain\u002Fsdk\u002Fmonitor\u002Fazure-monitor-ingestion\u002FTROUBLESHOOTING.md |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,56,683,"2026-05-16 13:07:11",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"DevOps","devops","mdi-cog-outline","CI\u002FCD、容器化、部署运维",3,162,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"920754dd-5eb7-4cc0-b7e8-741063facc17","1.0.0","azure-monitor-ingestion-java.zip",2745,"uploads\u002Fskills\u002F719df39c-32be-4656-a1dc-c3751002ca46\u002Fazure-monitor-ingestion-java.zip","3da63c7e3deb4841065e6a49eaf494f6719e76cff260a802a590616b93f3e502","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":7521}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]