{"id":"cc540c01-025a-40ef-b2cc-edf127dbdef4","shortId":"vCDs5Y","kind":"skill","title":"azure-monitor-ingestion-java","tagline":"Azure Monitor Ingestion SDK for Java. Send custom logs to Azure Monitor via Data Collection Rules (DCR) and Data Collection Endpoints (DCE).","description":"# 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<dependency>\n    <groupId>com.azure</groupId>\n    <artifactId>azure-monitor-ingestion</artifactId>\n    <version>1.2.11</version>\n</dependency>\n```\n\nOr use Azure SDK BOM:\n\n```xml\n<dependencyManagement>\n    <dependencies>\n        <dependency>\n            <groupId>com.azure</groupId>\n            <artifactId>azure-sdk-bom</artifactId>\n            <version>{bom_version}</version>\n            <type>pom</type>\n            <scope>import</scope>\n        </dependency>\n    </dependencies>\n</dependencyManagement>\n\n<dependencies>\n    <dependency>\n        <groupId>com.azure</groupId>\n        <artifactId>azure-monitor-ingestion</artifactId>\n    </dependency>\n</dependencies>\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://<dce-name>.<region>.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(\"<data-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(\"<data-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<Object> logs = new ArrayList<>();\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(\"<data-collection-rule-id>\", \"<stream-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<Object> logs = getLargeLogs(); // Large collection\n\nLogsUploadOptions options = new LogsUploadOptions()\n    .setMaxConcurrency(3);\n\nclient.upload(\"<data-collection-rule-id>\", \"<stream-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        // Option 1: Log and continue\n        // Option 2: Throw to abort remaining uploads\n        // throw uploadError.getResponseException();\n    });\n\nclient.upload(\"<data-collection-rule-id>\", \"<stream-name>\", logs, options, Context.NONE);\n```\n\n### Async Upload with Reactor\n\n```java\nimport reactor.core.publisher.Mono;\n\nList<Object> logs = getLogs();\n\nasyncClient.upload(\"<data-collection-rule-id>\", \"<stream-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    // 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// 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://central.sonatype.com/artifact/com.azure/azure-monitor-ingestion |\n| GitHub | https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/monitor/azure-monitor-ingestion |\n| Product Docs | https://learn.microsoft.com/azure/azure-monitor/logs/logs-ingestion-api-overview |\n| DCE Overview | https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-endpoint-overview |\n| DCR Overview | https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview |\n| Troubleshooting | https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-ingestion/TROUBLESHOOTING.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.","tags":["azure","monitor","ingestion","java","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents"],"capabilities":["skill","source-sickn33","skill-azure-monitor-ingestion-java","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-monitor-ingestion-java","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (7,251 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:32.486Z","embedding":null,"createdAt":"2026-04-18T21:32:50.352Z","updatedAt":"2026-04-24T18:50:32.486Z","lastSeenAt":"2026-04-24T18:50:32.486Z","tsv":"'-01':226,238 '-15':227,239 '/artifact/com.azure/azure-monitor-ingestion':558 '/azure/azure-monitor/essentials/data-collection-endpoint-overview':572 '/azure/azure-monitor/essentials/data-collection-rule-overview':577 '/azure/azure-monitor/logs/logs-ingestion-api-overview':567 '/azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-ingestion/troubleshooting.md':581 '/azure/azure-sdk-for-java/tree/main/sdk/monitor/azure-monitor-ingestion':562 '00z':230 '05z':242 '1':310,448 '1.2.11':59 '10':549 '1h':547 '2':315,460 '2024':225,237 '3':277,468 '30':229,241 '4':479 '403':426 '404':438 '5':491 '6':500 '7':508 'abort':318 'action':594 'ago':546 'analyt':90,202 'api':47 'applic':232,507,588 'arraylist':221 'ask':632 'async':327,510 'asynccli':155 'asyncclient.upload':337 'asynchron':149 'azur':2,6,16,28,41,56,62,68,77,523,533 'azure-monitor-ingest':55,76 'azure-monitor-ingestion-java':1 'azure-monitor-queri':522,532 'azure-sdk-bom':67 'bash':105 'batch':449,453 'best':446 'bom':64,70,71 'boundari':640 'build':140,162 'buildasynccli':163 'buildclient':148 'built':97 'built-in':96 'catch':412 'central.sonatype.com':557 'central.sonatype.com/artifact/com.azure/azure-monitor-ingestion':556 'check':428 'cl':122,200,543 'clarif':634 'class':357 'clear':607 'client':34,123,126,142,150,502 'client.upload':246,278,323,408 'collect':20,25,50,82,86,107,111,169,179,258,271 'com.azure':54,66,75 'com.azure.core.exception.httpresponseexception':406 'com.azure.core.util.context':266 'com.azure.identity.defaultazurecredential':129 'com.azure.identity.defaultazurecredentialbuilder':131 'com.azure.monitor.ingestion.logsingestionasyncclient':153 'com.azure.monitor.ingestion.logsingestionclient':133 'com.azure.monitor.ingestion.logsingestionclientbuilder':135 'com.azure.monitor.ingestion.models.logsuploadoptions':264 'commonsecuritylog':99 'complet':343 'concept':165,166 'concurr':254,260,462 'consum':474 'context.none':281,326 'continu':313 'core':208 'count':306 'creat':503 'creation':124 'credenti':137,146,147,159 'criteria':643 'custom':13,38,94,120,198,211 'custom-myt':119,197 'data':19,24,49,81,85,106,110,168,178,183 'dce':27,84,171,441,568 'dcr':22,88,115,181,195,429,444,481,488,573 'dcr-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx':114 'debug':243 'defaultazurecredenti':136 'defaultazurecredentialbuild':139,161 'defin':182 'describ':595,611 'descript':167 'destin':204 'doc':564 'doonerror':344 'doonsuccess':339 'e':345,414 'e.g':196 'e.getmessage':349,422 'e.getresponse':418,424,436 'els':434 'enabl':259 'endpoint':26,83,108,145,158,170,173,442 'entri':352,478,484 'environ':103,623 'environment-specif':622 'error':284,300,402,421,473 'exampl':354 'execut':590 'expect':490 'expert':628 'fail':304,348,477 'failur':289,471 'field':485,499 'getlargelog':269 'getlevel':394 'getlog':336 'getmessag':302,399 'getstatuscod':419,425,437 'getter':382 'gettimegener':389 'github':559 'github.com':561,580 'github.com/azure/azure-sdk-for-java/blob/main/sdk/monitor/azure-monitor-ingestion/troubleshooting.md':579 'github.com/azure/azure-sdk-for-java/tree/main/sdk/monitor/azure-monitor-ingestion':560 'grace':290 'handl':285,286,403,469 'high':512 'http':416 'httpresponseexcept':413 'id':113,445 'ident':433 'import':74,128,130,132,134,152,214,216,263,265,332,405 'includ':492 'info':231 'ingest':4,8,30,46,58,79,172,206,528 'ingest.monitor.azure.com':109 'input':637 'instal':52 'java':5,11,33,127,151,213,262,291,331,355,404,530 'java.util.arraylist':217 'java.util.list':215 'json':385 'key':164 'larg':256,270,466 'learn.microsoft.com':566,571,576 'learn.microsoft.com/azure/azure-monitor/essentials/data-collection-endpoint-overview':570 'learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview':575 'learn.microsoft.com/azure/azure-monitor/logs/logs-ingestion-api-overview':565 'level':364,373,379,396 'librari':35 'limit':548,599 'link':551 'list':218,267,334 'log':14,39,45,89,201,207,212,219,247,249,257,268,279,305,311,324,335,338,351,411,450,476,483,520,529 'logs.add':222,234 'logsingestionasynccli':154,514 'logsingestioncli':141 'logsingestionclientbuild':144,157 'logsquerycli':538 'logsuploadopt':272,275,292,295 'manag':432 'match':480,487,608 'maven':554 'maxconcurr':464 'messag':367,375,381,401 'miss':645 'model':353 'monitor':3,7,17,29,42,57,78,524,534 'must':486 'mylogentri':224,236,358,369 'mytabl':121,199,542 'name':118,190 'new':138,143,156,160,220,223,235,274,294 'one':456 'oper':209 'option':273,280,293,309,314,325 'output':617 'overview':569,574,598 'packag':555 'partial':287,470 'pattern':517 'permiss':430,638 'pom':73 'practic':447 'prerequisit':80 'privat':359,362,365 'process':244 'product':563 'public':356,368,387,392,397 'queri':518,525,527,535,541 'rather':454 'reactiv':516 'reactor':330 'reactor.core.publisher.mono':333 'refer':550 'region':177 'remain':319 'request':245 'requir':383,496,636 'resourc':552 'return':390,395,400 'reus':501,505 'review':629 'rout':186 'rule':21,51,87,112,180 'ruleid':409 'safeti':639 'schema':482 'scope':610 'sdk':9,31,63,69 'securityev':100 'see':531 'send':12,37 'serial':386 'set':463 'setlogsuploaderrorconsum':296 'setmaxconcurr':276 'size':308 'skill':536,586,602 'skill-azure-monitor-ingestion-java' 'source-sickn33' 'specif':624 'start':233 'status':417 'stop':630 'stream':117,189,192 'streamnam':410 'string':360,363,366,370,372,374,388,393,398,540 'subscrib':350 'substitut':620 'success':251,642 'synchron':125 'syslog':101 'system.err.println':298,303,346,415,420,427,439 'system.out.println':248,341 't10':228,240 'tabl':93,188,495 'target':92,191 'task':606 'test':626 'this.level':378 'this.message':380 'this.timegenerated':376 'throughout':506 'throughput':513 'throw':316,321 'time':459 'timegener':361,371,377,391,493,545 'timestamp':498 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'transform':184,489 'treat':615 'tri':407 'troubleshoot':578 'upload':210,250,252,261,282,288,299,320,328,342,347,451,467,519 'uploaderror':297 'uploaderror.getfailedlogs':307 'uploaderror.getresponseexception':301,322 'url':174,553 'usag':539 'use':43,61,461,472,509,521,584,600 'v':340 'valid':625 'variabl':104 'verifi':440 'version':72 'via':18,48 'windowsev':102 'workflow':592 'workspac':91,203 'xml':53,65 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx':116","prices":[{"id":"47d27a87-d98e-45c3-9821-5f1a38b3fa2f","listingId":"cc540c01-025a-40ef-b2cc-edf127dbdef4","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:50.352Z"}],"sources":[{"listingId":"cc540c01-025a-40ef-b2cc-edf127dbdef4","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-monitor-ingestion-java","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-monitor-ingestion-java","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:50.352Z","lastSeenAt":"2026-04-24T18:50:32.486Z"}],"details":{"listingId":"cc540c01-025a-40ef-b2cc-edf127dbdef4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-monitor-ingestion-java","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"dee56390eb679e4fce4459186c7fa1d4b70bd24e","skill_md_path":"skills/azure-monitor-ingestion-java/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-monitor-ingestion-java"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-monitor-ingestion-java","description":"Azure Monitor Ingestion SDK for Java. Send custom logs to Azure Monitor via Data Collection Rules (DCR) and Data Collection Endpoints (DCE)."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-monitor-ingestion-java"},"updatedAt":"2026-04-24T18:50:32.486Z"}}