Telemetry with AzureSDK
Mix.install([
{:azure_sdk, path: Path.expand("..", __DIR__)}
])
{:ok, stats} = Agent.start_link(fn -> %{attempts: 0, durations: []} end)
:telemetry.attach(
"ex-azure-attempt",
[:azure_sdk, :request, :attempt],
fn _event, _measurements, metadata, _ ->
Agent.update(stats, fn s -> %{s | attempts: s.attempts + 1} end)
IO.inspect(metadata, label: "request attempt")
end,
nil
)
:telemetry.attach(
"ex-azure-stop",
[:azure_sdk, :request, :stop],
fn _event, %{duration: duration}, metadata, _ ->
Agent.update(stats, fn s -> %{s | durations: [duration | s.durations]} end)
IO.inspect({duration, metadata}, label: "request stop")
end,
nil
)
:telemetry.attach(
"ex-azure-blob",
[:azure_sdk, :blob, :put],
fn _event, measurements, metadata, _ ->
IO.inspect({measurements, metadata}, label: "blob put")
end,
nil
)
Emit events with a blob upload
credential =
AzureSDK.Identity.SharedKeyCredential.new(
"devstoreaccount1",
"Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
)
client =
AzureSDK.Storage.Client.new(
account: "devstoreaccount1",
credential: credential,
endpoint: "http://127.0.0.1:10000/devstoreaccount1"
)
container = "telemetry-demo"
{:ok, _} = AzureSDK.Storage.Container.create(client, container)
{:ok, _} = AzureSDK.Storage.Blob.upload(client, container, "metric.txt", "telemetry")
Agent.get(stats, & &1)