Repository navigation
Releases
v1.8.0
Nekomari v1.8.0
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
manual-komari-agent-<os>-<arch> |
Opt-in monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
Agent binaries are intentionally prefixed
manual-for this release.
Existing Agents will not auto-update to them; install a checksum-verified
binary explicitly after reviewing the node and retaining its old binary.
Installer scripts and panel-requested automatic updates do not target these
assets. The previous release remains GitHub's latest installer target.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./manual-komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.8.0Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
Full Changelog: v1.7.30...v1.8.0
v1.7.30
Nekomari v1.7.30
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
manual-komari-agent-<os>-<arch> |
Opt-in monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
Agent binaries are intentionally prefixed
manual-for this release.
Existing Agents will not auto-update to them; install a checksum-verified
binary explicitly after reviewing the node and retaining its old binary.
Installer scripts and panel-requested automatic updates do not target these
assets. The previous release remains GitHub's latest installer target.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./manual-komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.30Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- Design bounded execution history and record v1.7.29 delivery by @Aone2233 in #164
- Design fail-closed address-family selection for hostname probes by @Aone2233 in #168
Full Changelog: v1.7.29...v1.7.30
v1.7.29
Nekomari v1.7.29
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.29Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
Full Changelog: v1.7.28...v1.7.29
v1.7.28
Nekomari v1.7.28
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.28Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
Full Changelog: v1.7.27...v1.7.28
v1.7.27
Nekomari v1.7.27
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.27Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- Record v1.7.26 delivery: conservative restart count live on OC424 by @Aone2233 in #159
- 50-node capacity gate: harness, passing 30-minute run, docs by @Aone2233 in #160
- v1.7.27: metric CSV export on the node chart page by @Aone2233 in #161
Full Changelog: v1.7.26...v1.7.27
v1.7.26
Nekomari v1.7.26
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.26Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- Record v1.7.25 delivery: rate-limited rule test send live on OC424 by @Aone2233 in #156
- Record owner acceptance: v1.7.24 window coverage and v1.7.25 test send by @Aone2233 in #157
- Add a conservative per-node restart count from uptime regressions by @Aone2233 in #158
Full Changelog: v1.7.25...v1.7.26
v1.7.25
Nekomari v1.7.25
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.25Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- Record v1.7.24 production delivery by @Aone2233 in #154
- Add a rate-limited test send for saved load-alert rules by @Aone2233 in #155
Full Changelog: v1.7.24...v1.7.25
v1.7.24
Nekomari v1.7.24
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.24Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- v1.7.23 delivery record by @Aone2233 in #151
- v1.7.23 backup close-out and update plan by @Aone2233 in #152
- v1.7.24: SLA window-coverage fields by @Aone2233 in #153
Full Changelog: v1.7.23...v1.7.24
v1.7.23
Nekomari v1.7.23
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.23Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- Record v1.7.22 production delivery by @Aone2233 in #149
- v1.7.23: zone-labelled timestamps by @Aone2233 in #150
Full Changelog: v1.7.22...v1.7.23
v1.7.22
Nekomari v1.7.22
Self-hosted server monitoring — a maintained continuation of
Komari, forked from 1.5.0-fix1.
Downloads
| File | What |
|---|---|
nekomari-<os>-<arch> |
Server + web panel (default theme embedded) |
komari-agent-<os>-<arch> |
Monitoring agent (probe) |
sbom.spdx.json |
SPDX SBOM for the binaries above (syft) |
SHA256SUMS.txt |
Checksums for every attached file |
The agent asset intentionally keeps the
komari-agent-prefix: that is the
name the agent's self-updater looks for (agent/update/update.go).
Renaming it would break auto-update.
Every attached binary also carries a build provenance attestation signed by
this workflow run. Verify one before running it:
gh attestation verify ./nekomari-linux-amd64 -R Aone2233/NekomariQuick start
./nekomari-<os>-<arch> server # then open http://localhost:25774
./komari-agent-<os>-<arch> -e https://your-panel -t <token>New in this fork
netcheck— probe which protocol a target actually answers, before you
configure a monitoring task around it- ping task type
auto— the agent picks a protocol the target answers - ping task type
dual— measures ICMP and TCP side by side, so "target
only answers TCP" stops looking like an outage - reference target on a ping task — compare the target against your gateway
to tell a local problem from an upstream one - baseline alerting — alert on deviation from a rule's own P95 history
- backup freshness metric (
backup.age_seconds/backup.ok) - IP information API (
/api/*/ip-info/v1) — geo, ASN, network type and
Globalping latency, for themes that render an IP panel - address-family aware scheduling — a node with no IPv4 address is skipped
on IPv4-literal targets instead of reporting a permanent 100% loss
Container image
docker run -d --name nekomari -p 25774:25774 \
-v nekomari-data:/app/data \
ghcr.io/aone2233/nekomari:v1.7.22Multi-arch (linux/amd64, linux/arm64), anonymously pullable. The binary
inside is the same one attached below, not a separate build.
Always pass
-v. The image declaresVOLUME /app/data, so without it
Docker creates an anonymous volume — and recreating the container (which
is what an image update does) attaches a different one, so the panel comes
up empty and shows the install wizard. The data is orphaned, not deleted.
A named volume or a bind mount both work.
See FORK.md
for provenance, and docs/TESTING.md for which tests need a privileged or
IPv6-capable host.
What's Changed
- Record v1.7.21 production delivery by @Aone2233 in #147
- Metric batch query: per-key error reporting by @Aone2233 in #148
Full Changelog: v1.7.21...v1.7.22