TN-033 β Implement and Verify Alertmanager Mailpit SMTP Capture¶
| Field | Value |
|---|---|
| Status | Completed |
| Activity Type | Implementation |
| Record Type | Live |
| Project | Tomcat Monitoring |
| Phase | Monitoring Integration and Runtime Deployment |
| Activity Date | 2026-08-27 |
| Recorded Date | 2026-08-27 |
| Owner | Project owner |
| Working Mode | Mixed |
| Authorization Status | Approved |
| Approved By | Project owner |
| Approval Date | 2026-08-27 |
π― Objective¶
Menambahkan tujuan pengiriman email Alertmanager ke Mailpit tanpa credential
(informasi autentikasi), lalu membuktikan bahwa email peringatan (firing) dan
email pemulihan (resolved) diterima melalui container sementara yang telah
ditetapkan pada TN-032.
π Background¶
TN-031 memilih Mailpit lokal agar lab tidak memerlukan credential Gmail atau
pengiriman email ke layanan eksternal. TN-032 menerima penggunaan image resmi
Mailpit secara langsung (direct-upstream exception), mengunci versi Mailpit
v1.31.0, serta menetapkan nama resource, port lokal, identitas pengujian, dan
aturan pembersihan resource sementara.
Working tree masih menyimpan perubahan TN-029 sampai TN-032. TN-033 harus meneruskan perubahan tersebut tanpa reset, overwrite, atau unrelated cleanup.
π Scope¶
Aktivitas yang disetujui mencakup:
- mengubah Alertmanager configuration dari webhook lab receiver menjadi non-secret Mailpit email receiver;
- memperbarui static validator, repository validator, verification interface, dan documentation yang terkait langsung;
- menarik exact accepted Mailpit image;
- membuat network
tm-tn033-mailpit, containerstm-tn033-mailpitsertatm-tn033-alertmanager, dan loopback bindings18025serta19093; - menjalankan static, shell, semantic, dan isolated firing/resolved capture verification; serta
- menghapus exact containers, network, dan temporary files yang dibuat TN-033.
Image Mailpit tetap disimpan. Persistent runtime, named volume, host SMTP publication, external relay atau email, credential, personal recipient, Prometheus delivery, commit, dan push tidak termasuk.
π Prerequisites¶
| Prerequisite | Expected State | Initial State |
|---|---|---|
| Ownership gate | Direct-upstream exception and immutable pin accepted | Satisfied by TN-032 |
| Mailpit image | Exact v1.31.0 manifest digest accepted |
Satisfied by TN-032; not yet pulled |
| Alertmanager image | localhost/alertmanager:1.0.0 available |
To verify before runtime |
| Exact resources | Candidate names absent | Read-only TN-032 inspection passed; repeat before creation |
| Loopback ports | 18025 and 19093 available |
Read-only TN-032 inspection passed; repeat before creation |
| Secrets | None required | Satisfied |
βοΈ Execution Decision¶
Gunakan pengecualian image upstream yang telah diterima pada TN-032 dengan referensi Mailpit berikut:
ghcr.io/axllent/mailpit:v1.31.0@sha256:c96991d9bef73594c246d89ca81411d4e916f03e76a7d2d72fa2ab5dd3c9ce24
SMTP Mailpit hanya tersedia di dalam container network melalui
mailpit:1025. Script pengujian pada host hanya mengakses API Mailpit melalui
127.0.0.1:18025 dan API Alertmanager melalui 127.0.0.1:19093. Pengujian
tidak mengirim email ke layanan eksternal dan tidak menyimpan message secara
permanen.
Keputusan ini menerapkan TM-ADR-0005, yang mencatat alasan Mailpit menjadi target verifikasi notification lab.
πΊοΈ Architecture¶
Host verification script
|-- POST synthetic alerts --> 127.0.0.1:19093
`-- inspect messages -------> 127.0.0.1:18025
tm-tn033-alertmanager --SMTP--> mailpit:1025
\________ tm-tn033-mailpit network ________/
π§ Implementation Plan¶
Implementation mengikuti lima tahap berikut. Nama dan urutannya sama dengan
procedure step pada bagian Implementation agar rencana dan pelaksanaan dapat
dibandingkan secara langsung.
| Tahap | Rencana |
|---|---|
| Review the Approved Boundary and Current Source | Memeriksa scope yang disetujui, source yang berlaku, serta perubahan TN sebelumnya yang harus dipertahankan. |
| Implement and Validate the Mailpit Interfaces | Menerapkan konfigurasi serta script Mailpit, kemudian menjalankan pemeriksaan sintaks dan validator repository. |
| Run the Isolated Email Capture | Menjalankan Alertmanager dan Mailpit sementara untuk menguji email peringatan (firing) dan pemulihan (resolved). |
| Confirm the Image Identity and Cleanup | Memastikan image Mailpit sesuai versi yang diterima dan seluruh resource sementara telah dibersihkan. |
| Consolidate the Verified Result | Menyelaraskan hasil yang sudah dibuktikan ke dokumentasi serta mencatat source-control handoff. |
Review the Approved Boundary and Current Source
|
v
Implement and Validate the Mailpit Interfaces
|
v
Run the Isolated Email Capture
|
v
Confirm the Image Identity and Cleanup
|
v
Consolidate the Verified Result
Perubahan source hanya boleh dikoreksi melalui perubahan lanjutan yang direview; perubahan pengguna tidak boleh di-reset. Pembersihan runtime hanya mencakup resource yang dibuat TN-033. Penghapusan image memerlukan izin terpisah dan tidak termasuk dalam aktivitas ini.
βοΈ Implementation¶
Review the Approved Boundary and Current Source¶
Pastikan pekerjaan dimulai dari source dan perubahan pengguna yang benar. Pemeriksaan ini juga memastikan konfigurasi webhook lama tetap dapat digunakan sebagai pengujian historis TN-029.
- Baca script pengujian webhook, validator, dan dokumentasi yang berlaku.
- Periksa diff serta status working tree sebelum perubahan dilakukan.
- Pastikan perubahan TN sebelumnya dapat dipertahankan tanpa reset.
# /home/eddywiyatno/git/tomcat-monitoring
sed -n '1,420p' scripts/verify-alertmanager-webhook.sh
sed -n '1,260p' scripts/validate.sh && sed -n '1,300p' scripts/validate-alertmanager.sh
sed -n '1,260p' README.md && sed -n '1,240p' config/alertmanager/README.md && sed -n '1,220p' validation/README.md
git diff -- README.md config/alertmanager/README.md scripts/validate-alertmanager.sh scripts/validate.sh validation/README.md && git status --short --branch
git status --short && sed -n '1,240p' config/alertmanager/alertmanager.yml && sed -n '1,280p' scripts/validate-alertmanager.sh && sed -n '1,260p' scripts/validate.sh && sed -n '1,320p' scripts/verify-alertmanager-webhook.sh
sed -n '1,280p' README.md && sed -n '1,260p' config/alertmanager/README.md && sed -n '1,300p' validation/README.md && sed -n '1,320p' /home/eddywiyatno/git/devops-handbook/docs/projects/tomcat-monitoring/engineering-journal/monitoring-integration-and-runtime-deployment/TN-033-implement-and-verify-alertmanager-mailpit-smtp-capture.md
Expected Result
Source, validator, dokumentasi, dan perubahan yang sudah ada dapat dibedakan. Tidak ada perubahan pengguna yang perlu di-reset atau ditimpa.
Actual Result: kondisi awal berhasil diperiksa. Perubahan TN-029 sampai TN-032 dipertahankan dan menjadi baseline TN-033.
Evidence: output git status, diff terbatas, serta isi source dan
dokumentasi terkait tersedia dalam execution record.
Implement and Validate the Mailpit Interfaces¶
Ubah tujuan pengiriman aktif dari webhook integration-bridge menjadi email
lokal lab-mailpit, lalu pastikan seluruh script masih valid secara sintaks dan
kontrak repository.
Konfigurasi yang diterapkan menetapkan:
- internal-only SMTP
mailpit:1025denganrequire_tls: falsekarena koneksi hanya berada pada disposable container network; - synthetic sender
alertmanager@tomcat-monitoring.invaliddan recipientoperator@tomcat-monitoring.invalid; send_resolved: true, lima stable grouping labels, dan deterministic subject; serta- tidak ada authentication, secret, personal identity, relay, atau external endpoint.
Validator statis memeriksa receiver, identitas .invalid, ketiadaan webhook
aktif dan credential, serta nama resource pengujian Mailpit. Validator utama
repository juga mewajibkan script baru
scripts/verify-alertmanager-mailpit.sh.
- Terapkan konfigurasi email Mailpit dan script pengujiannya.
- Jadikan script pengujian dapat dieksekusi.
- Jalankan pemeriksaan sintaks, validator repository, dan whitespace.
# /home/eddywiyatno/git/tomcat-monitoring
chmod 0755 scripts/verify-alertmanager-mailpit.sh
bash -n scripts/*.sh
./scripts/validate.sh
git diff --check
Expected Result
Script pengujian dapat dieksekusi, seluruh shell script valid, kontrak konfigurasi Mailpit lulus, dan diff tidak memiliki whitespace error.
Actual Result: seluruh pemeriksaan selesai dengan exit code 0.
Evidence: bash -n, ./scripts/validate.sh, dan git diff --check
seluruhnya lulus.
Run the Isolated Email Capture¶
Jalankan pengujian menggunakan Alertmanager dan Mailpit sementara. Script membuat network serta container dengan nama khusus TN-033, mengirim alert peringatan dan pemulihan, memeriksa kedua email melalui API Mailpit, lalu membersihkan resource sementara.
- Jalankan script verification dengan reference image yang telah diterima.
- Biarkan script mengirim alert firing dan resolved melalui Alertmanager.
- Periksa kedua message melalui API Mailpit.
- Ulangi pengujian setelah memperbaiki cara pembacaan versi Mailpit.
Command yang sama dijalankan empat kali selama penyempurnaan verification interface:
- Run pertama menangkap kedua email dan membersihkan resource, tetapi berakhir
dengan exit code
141karena output/mailpit --versionditeruskan kehead. - Run kedua kembali menangkap kedua email dan membersihkan resource, tetapi
opsi versi Mailpit mengembalikan exit code
1. - Pemeriksaan versi dipindahkan ke API
/api/v1/info; run ketiga selesai dengan exit code0. - Run terakhir menambahkan pemeriksaan body message lengkap dan kembali
selesai dengan exit code
0.
Expected Result
Mailpit menerima satu email peringatan dan satu email pemulihan dengan sender, recipient, subject, dan lima grouping label yang sesuai. Seluruh resource sementara dibersihkan meskipun pengujian gagal di tengah proses.
Actual Result: run terakhir lulus. Dua kegagalan awal hanya berasal dari cara membaca versi Mailpit; pengiriman email dan cleanup pada kedua run tersebut tetap berhasil.
Evidence: run ketiga dan keempat selesai dengan exit code 0; final run
memastikan body message memuat seluruh grouping label dan value yang diwajibkan.
Confirm the Image Identity and Cleanup¶
Periksa bahwa image yang digunakan sesuai versi yang diterima dan tidak ada container atau network TN-033 yang tertinggal.
- Periksa digest, architecture, operating system, dan label image Mailpit.
- Cari seluruh container dengan nama yang diawali
tm-tn033. - Cari network
tm-tn033-mailpit.
# /home/eddywiyatno/git/tomcat-monitoring
podman image inspect --format 'digest={{.Digest}} arch={{.Architecture}} os={{.Os}} labels={{json .Labels}}' 'ghcr.io/axllent/mailpit:v1.31.0@sha256:c96991d9bef73594c246d89ca81411d4e916f03e76a7d2d72fa2ab5dd3c9ce24'
podman ps -a --filter name=tm-tn033 --format '{{.Names}}'
podman network ls --filter name=tm-tn033-mailpit --format '{{.Name}}'
Expected Result
Image cocok dengan digest serta platform yang diterima. Container
tm-tn033-mailpit, container tm-tn033-alertmanager, dan network
tm-tn033-mailpit sudah tidak tersedia.
Actual Result: identity Mailpit v1.31.0 pada linux/amd64 sesuai.
Container, network, temporary file, dan listener TN-033 tidak tersisa. Image
Mailpit sengaja dipertahankan sesuai scope.
Evidence: image inspection mengembalikan identity yang diterima, sedangkan container dan network query tidak mengembalikan resource TN-033.
Consolidate the Verified Result¶
Pastikan dokumentasi tidak lagi menyatakan Mailpit belum diterapkan dan catat source-control handoff tanpa melakukan commit atau push di luar izin terpisah.
- Cari pernyataan lama yang masih menyebut Mailpit belum diterapkan.
- Pastikan status TN-033 dan navigation entry sudah konsisten.
- Periksa ketersediaan MkDocs dan kondisi final kedua repository.
# /home/eddywiyatno/git/devops-handbook
rg -n "TN-033|Mailpit|mailpit|Pending|not yet pulled|belum diimplementasikan|belum diterapkan" docs/projects/tomcat-monitoring -g '*.md'
rg -n 'Mailpit.*(pending|not implemented|not verified)|source integration, image pull|runtime belum dikerjakan|implementation pending|source, image, and runtime not implemented' docs/projects/tomcat-monitoring -g '*.md'
rg -n 'Status \| Completed|message_body_group_labels|exit `0`|TN-033-implement-and-verify' docs/projects/tomcat-monitoring/engineering-journal/monitoring-integration-and-runtime-deployment/TN-033-implement-and-verify-alertmanager-mailpit-smtp-capture.md docs/projects/tomcat-monitoring/engineering-journal/monitoring-integration-and-runtime-deployment/index.md docs/projects/tomcat-monitoring/engineering-journal/monitoring-integration-and-runtime-deployment/.pages
if command -v mkdocs >/dev/null; then mkdocs --version; else echo 'mkdocs=not-installed'; fi
# Post-push diagram clarification
git status --short --branch
sed -n '175,235p' docs/projects/tomcat-monitoring/engineering-journal/monitoring-integration-and-runtime-deployment/TN-033-implement-and-verify-alertmanager-mailpit-smtp-capture.md
git -C /home/eddywiyatno/git/tomcat-monitoring status --short --branch
git -C /home/eddywiyatno/git/tomcat-monitoring log -1 --oneline
Expected Result
Status TN, phase index, dan current-state documentation menyampaikan hasil yang sama. Riwayat commit dapat ditelusuri dan tidak ada klaim bahwa render MkDocs sudah diverifikasi bila executable tidak tersedia.
Actual Result: pemeriksaan konsistensi dan git diff --check lulus. MkDocs
tidak tersedia sehingga rendered-site build tidak dijalankan.
Evidence: pencarian status tidak menemukan klaim current-state yang bertentangan; commit dan branch handoff dapat ditelusuri pada kedua repository.
Script webhook historis TN-029 tetap menggunakan konfigurasi webhook sementara dan tidak bergantung pada receiver aktif Mailpit. Sintaks script tersebut divalidasi, tetapi pengujian runtime TN-029 tidak diulang dalam TN-033.
β Verification¶
| Method | Expected Result | Actual Result | Evidence |
|---|---|---|---|
| Shell and static validation | Updated scripts parse and source contract passes | Passed | bash -n scripts/*.sh, ./scripts/validate.sh, and git diff --check exit 0 |
| Semantic configuration | amtool check-config accepts Mailpit receiver |
Passed | semantic_config=passed from exact Alertmanager container |
| Image identity | Accepted manifest resolves to linux/amd64 and Mailpit v1.31.0 |
Passed | Digest sha256:c96991d9...c9ce24, platform linux/amd64, API version v1.31.0 |
| Isolated capture | One firing and one resolved email match synthetic contract | Passed | Sequence, sender, recipient, both subjects, and body tokens for all five grouping labels passed |
| Security boundary | SMTP is internal and no credential or external delivery is used | Passed | smtp_endpoint=mailpit:1025 host_smtp_published=false; only loopback APIs were published |
| Cleanup audit | Exact containers, network, temporary files, and listeners are absent | Passed | Containers/network absent, ports released, volumes unchanged, image retained |
| Documentation consistency | Current-state pages and TN navigation reflect completed implementation | Passed with tooling limitation | Link/navigation references and git diff --check passed; MkDocs executable was not installed, so rendered-site build was not run |
β Operator Validation¶
Pengujian TN-033 memakai container sementara dan langsung membersihkannya setelah hasil API diperoleh. Karena itu, inbox Mailpit TN-033 sudah tidak dapat dibuka setelah aktivitas selesai.
| Item | Value |
|---|---|
| Status | Tidak tersedia setelah cleanup TN-033 |
| Pemeriksa | Project owner |
| Sasaran pemeriksaan | Satu email firing dan satu email resolved dengan identitas pengujian |
| Cara akses selama pengujian | API/UI Mailpit hanya melalui 127.0.0.1:18025 ketika verification script masih berjalan |
| Masa berlaku evidence | Sementara; message hilang ketika container Mailpit TN-033 dibersihkan |
| Pemeriksaan otomatis | Lulus; API memverifikasi sender, recipient, subject, urutan status, dan lima grouping label |
| Keputusan visual | Tidak dilakukan pada TN-033 karena resource sudah dibersihkan |
Cara Memeriksa Hasil Setelah TN-033
Jangan menjalankan ulang container sementara hanya untuk membuka UI karena tindakan tersebut memerlukan authorization runtime baru. Persistent Mailpit dan petunjuk membuka UI kemudian tersedia pada TN-035.
π₯οΈ Commands Executed¶
Seluruh command aktual ditempatkan pada procedure step sesuai urutan pelaksanaannya. Section ini menjadi indeks agar pembaca tidak perlu mencari ulang command berdasarkan raw log.
| Tahap | Procedure Step |
|---|---|
| Pemeriksaan source dan scope | Review the Approved Boundary and Current Source |
| Perubahan serta validasi source | Implement and Validate the Mailpit Interfaces |
| Pengujian firing/resolved | Run the Isolated Email Capture |
| Pemeriksaan image dan cleanup | Confirm the Image Identity and Cleanup |
| Konsolidasi dokumentasi | Consolidate the Verified Result |
π Version-Control Handoff¶
Project owner memberikan authorization commit terpisah setelah implementation
dan verification selesai pada 2026-08-27. Source repository
tomcat-monitoring dicatat dalam commit f380636 (feat: add Alertmanager
delivery verification). Engineering Journal dan current-state documentation
disimpan melalui commit de08cb3 pada repository devops-handbook. Project
owner kemudian melakukan push; kedua local branch telah terkonfirmasi sejajar
dengan origin/main.
π§Ύ Outcome¶
TN-033 selesai. Alertmanager memiliki konfigurasi untuk mengirim email ke Mailpit tanpa credential. Pengujian container sementara membuktikan bahwa satu email peringatan dan satu email pemulihan diterima dengan sender, recipient, subject, serta grouping label yang sesuai. Pengujian juga membuktikan bahwa SMTP hanya tersedia di container network dan seluruh resource sementara sudah dibersihkan. Image Mailpit tetap tersedia sesuai authorization.
Hasil ini belum membuktikan pengiriman alert dari Prometheus, runtime Alertmanager yang terus berjalan, email eksternal, Integration Bridge, atau TrueSight. Inbox TN-033 juga tidak dapat diperiksa lagi setelah cleanup karena Mailpit pada aktivitas ini bersifat sementara.
β Open Questions¶
| Question | Status | Owner | Closure Condition |
|---|---|---|---|
| Apakah Alertmanager akan diterapkan pada persistent lab? | Deferred | Project owner | New Technical Note accepts topology, continuity, rollback, exact resources, and runtime authorization |
| Apakah Prometheus-to-Alertmanager runtime delivery akan diverifikasi? | Deferred | Project owner | Persistent or isolated delivery target and verification boundary are approved |
| Apakah inbox atau external event delivery diperlukan? | Deferred | Project owner and future integration owner | Provider or Integration Bridge ownership, TLS/authentication, secret lifecycle, recipient handling, and external-delivery authorization are accepted |
βοΈ Next Steps¶
Batas yang Sudah Dibuktikan TN-033¶
Synthetic alert dari verification script
|
v
Disposable Alertmanager
|
| SMTP internal: mailpit:1025
v
Disposable Mailpit
|
v
Mailpit API memverifikasi firing dan resolved email
Setelah verification:
Alertmanager container + Mailpit container + network -> dihapus
Mailpit image -> dipertahankan
Alur tersebut membuktikan fungsi email receiver Alertmanager secara isolated. Ia belum membuktikan bahwa persistent Prometheus benar-benar mengirim alert ke Alertmanager.
Target Alur Berikutnya¶
Persistent Prometheus
|
| alert firing/resolved melalui API v2
v
Persistent Alertmanager
|
| SMTP internal
v
Mailpit verification target
|
v
Operator memeriksa email firing dan resolved
Urutan Technical Note yang Direkomendasikan¶
TN-033 Completed
|
v
TN-034 Decision Contract
- tetapkan persistent topology dan exact resources
- pilih Mailpit temporary atau persistent
- tetapkan storage, continuity, rollback, dan cleanup
- tetapkan verification boundary dan authorization
|
| project-owner approval
v
TN-035 Implementation and Verification
- deploy persistent Alertmanager
- hubungkan persistent Prometheus ke alertmanager:9093
- hasilkan alert firing dan resolved
- buktikan delivery sampai Mailpit
- verifikasi continuity atau jalankan rollback
TN-034 kemudian menetapkan rancangan persistent runtime dan TN-035 telah menerapkannya. Untuk memeriksa email melalui browser, gunakan bagian Operator Validation pada TN-035. External inbox delivery, Gmail, Integration Bridge, dan TrueSight tetap berada di luar hasil TN-033.
π Notes¶
Penyajian TN-033 dinormalisasi pada 2026-08-29 berdasarkan format procedure TN-035. Normalisasi hanya memperjelas urutan langkah, hasil yang diharapkan, hasil aktual, command, dan operator handoff; fakta teknis serta status historis TN-033 tidak diubah.