feat(new source): add Azure Blob Storage source#1
Conversation
There was a problem hiding this comment.
Pull request overview
This pull request introduces a new azure_blob source for Vector that enables reading logs from Azure Blob Storage via Event Grid notifications delivered through Azure Storage Queues.
Changes:
- New Azure Blob Storage source with queue-based event processing
- Support for compression (gzip, zstd), multiple codecs, and multiline aggregation
- Comprehensive unit and integration tests
- Documentation files and configuration examples
Reviewed changes
Copilot reviewed 20 out of 21 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/sources/azure_blob/mod.rs | Main source implementation with streaming and event processing |
| src/sources/azure_blob/queue.rs | Queue integration, blob retrieval, and Event Grid message processing |
| src/sources/azure_blob/test.rs | Unit tests for compression detection and blob processing |
| src/sources/azure_blob/integration_tests.rs | Integration tests covering various scenarios |
| src/internal_events/azure_queue.rs | Internal event definitions for metrics and logging |
| website/cue/reference/components/sources/azure_blob.cue | Component documentation and metadata |
| Cargo.toml | Dependency and feature flag additions |
| tests/integration/azure/config/*.yaml | Integration test configuration |
| testing/github-XXXXX/* | Test artifacts and documentation (should be removed) |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
e962d8b to
8a72d0d
Compare
8a72d0d to
fa44b4a
Compare
|
@copilot review |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 258 out of 292 changed files in this pull request and generated 8 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
fa44b4a to
6fd2c39
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 20 out of 21 changed files in this pull request and generated 8 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Hi @ldrozdz93, thanks for the work on adding the Azure Blob Storage source. This feature would be very useful for Azure-based pipelines, so I’m keen to see it move forward. Let me know if there’s anything I can help with from the community side. |
6fd2c39 to
16b3efc
Compare
16b3efc to
97f2ad9
Compare
…tool 1.0.6 after rebase Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… naming, log levels - Add trailing periods to log messages per instrumentation spec - Rename InvalidRowEventType to InvalidRowEventTypeError (error events must be named *Error) - Downgrade QueueMessageProcessingErrored/Rejected logs from error! to warn!: these track delivery outcomes via dedicated counters, matching S3's warn-level handling of errored/rejected batches; real component errors already emit *Error events with component_errors_total Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rules Upstream now disallows raw-string metrics::counter! in favor of vector_common's typed counter! macro with CounterName variants. Add the four azure_queue metric names to CounterName and migrate all call sites. Also drop a useless format! in integration tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ests Upstream restructured the azure integration test env (AZURITE_ADDRESS + AZURITE_OAUTH_ADDRESS); the branch's custom AZURE_ADDRESS line was lost in the rebase. Align the source tests with the sink tests' convention instead of reintroducing a third variable. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
eb3ce96 to
e8e4ee5
Compare
- deny.toml: re-add RUSTSEC-2024-0384 (instant) ignore - reintroduced by the legacy azure_core 0.21 dependency chain; upstream dropped it when nothing pulled instant anymore - azure_blob.cue: drop classes.commonly_used - field removed from the component schema upstream - expect.txt: add deser - pre-existing word flagged by code scanning due to large PR diff - compose.yaml: prettier list indentation Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move connection_string.rs, shared_key_policy.rs, and the auth/client-construction code (AzureAuthentication, build_client, transport assembly) from sinks/azure_common into the shared src/azure module, so the azure_blob source can reuse them. Sinks keep their import paths via re-exports. Also: - Fix SharedKey signing: Content-Length must contribute an empty string when the request body is zero-length (per the Authorize-with-Shared-Key spec and this file's own doc comment). The sink never signs zero-body requests so this was latent; queue operations (create/delete_message) hit it. - Re-gate 'pub mod azure' on the azure component features instead of the 'azure' meta-feature (which only the source enabled, and which will be removed when the legacy SDK is dropped). - Add azure_storage_queue 1.0 dependency and new-SDK deps to sources-azure_blob (transitional, legacy crates removed in a follow-up commit). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…achinery - connection_string: parse QueueEndpoint, add queue_account_endpoint()/queue_url() mirroring the blob logic (explicit endpoint short-circuits dev-storage synthesis) - client: factor resolve_credential()/build_transport() out of build_client and add build_queue_client() for azure_storage_queue 1.0; pin the Azurite-supported service version - shared_key_policy: sign the actual body length when the Content-Length header is absent — generated SDK clients (e.g. queue send_message) rely on the transport to set the header, so signing previously omitted it and the service rejected the signature - add an Azurite SharedKey roundtrip spike test (create/send/receive/delete) covering zero-body signing and query-parameter canonicalization Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ge_blob/queue 1.0 Replace the legacy azure_storage_blobs/azure_storage_queues 0.21 clients with the official azure_storage_blob 1.0 and azure_storage_queue 1.0 SDKs: - queue path: receive_messages with typed options (visibility timeout and batch size as seconds/i32), delete_message(message_id, pop_receipt); ReceivedMessage fields are optional in the new SDK, so extract a MessageHandle up front and fail with the new IncompleteMessage error if the service response lacks identifiers - blob path: get_properties via typed header traits, 404 detection via http_status(), and download() limited to a single in-flight range request so blob contents stream sequentially with bounded memory like the legacy client - client construction goes through the shared src/azure machinery (gains proxy support); make_* helpers and make_blob_with_ack_stream become async - integration tests ported: container/queue create with status-based 409 tolerance, blob upload via RequestContent, queue messages via send_message All 70 azure integration tests pass against Azurite (the moved connection-string unit tests left the integration filter scope and run in the unit suite instead). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove azure_storage/azure_storage_blobs/azure_storage_queues 0.21 and the azure_core_for_storage bridge (plus the 'azure' meta-feature and the legacy client builders), now that the source uses the official SDK throughout. This also sheds ~20 transitive crates (instant, http-types, futures-lite 1.x, RustyXML, ...) and the RUSTSEC-2024-0384 deny.toml ignore that existed only for the legacy dependency chain. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
This PR adds Azure Blob Storage source. From the user's perspective, it's intended to work in a similar manner to AWS S3 source.
Vector configuration
How did you test this PR?
make test, full workspace suite).make test-integration-azure, 70 tests covering the azure sink and source).make check-clippy,cargo vdev check events,make check-generated-docs,make check-docs(CUE),cargo deny check advisories,dd-rust-license-tool check, markdownlint, prettier.Change Type
Is this a breaking change?
Does this PR include user facing changes?
no-changeloglabel to this PR.References
Notes
azure_core1.0,azure_storage_blob1.0, andazure_storage_queue1.0, which went GA in May 2026), sharing the sink's client machinery (connection-string parsing, SharedKey signing policy, credential handling) via thesrc/azuremodule. No legacyazure_storage*crates are involved.Microsoft.Storage.BlobRenamedevents.make build-licenseswas run to regenerate the license inventory.