Docker & Portainer

Ubah Container Logs menjadi tabel yang dapat dikueri.

Setiap container yang dijalankan daemon menulis log. Kueri semuanya sekaligus — dengan nama asli container, image-nya, dan layanan Compose-nya, bukan sekadar folder berisi ID 64 karakter.

Gunakan hasilnya di Excel, Google Sheets, alat AI, dan aplikasi Anda melalui Database REST API.

Semua jenis konektor tersedia di paket Free. Mulai dengan 2 sumber data dan 1 agen.

Log KontainerFile dibaca di lokasi penyimpanannya
Di dalam jaringan AndaAgen Jaringan Aliran Permintaan

Baca, atur, dan kueri di mesin Anda.

Kueri hanya-baca · koneksi keluar

File sumber tetap di tempatnya. Alat Anda menerima hasil kueri.

Sumber → agent → hasil yang diizinkan

Query Streams mengubah log json-file Docker, ekspor docker logs yang Anda simpan secara manual, dan log server milik Portainer menjadi tabel SQL langsung yang dapat dibaca dari Microsoft Excel, Google Sheets, asisten AI melalui MCP, REST API, dan Power BI. Masalah rumit yang diatasinya adalah identitas: di disk, file-file ini dinamai berdasarkan ID container, sehingga agent mencocokkan setiap file dengan nama asli container, image, dan layanan Compose-nya sebelum baris dimasukkan. Tidak ada yang diunggah — agent membaca file di host dan hanya hasil kueri yang keluar dari jaringan Anda.

  • Nama container asli, bukan ID
  • Image dan layanan Compose di setiap baris
  • stdout dan stderr tetap terpisah

Hubungkan Container Logs dengan pengaturan yang tepat.

Pertahankan koneksi pada Network Agent. Berikut detail khusus untuk Container Logs.

Map
Direktori log daemon di host container, atau folder yang berisi log ekspor
Sumber
Log json-file Docker, ekspor docker logs yang disimpan, dan log server Portainer
Identitas
Nama container, image, dan layanan Compose yang dicocokkan dari daemon, sehingga baris tidak menggunakan ID 64 karakter sebagai kunci
Rotasi
Diikuti saat daemon melakukan rotasi, ditambah sepuluh pola rotasi bernama untuk file ekspor
Baris yang tidak cocok
Disimpan apa adanya dalam events_raw_lines, tidak pernah dibuang
Kredensial
Tidak ada — agent membaca file langsung di host
Dialek SQL
DuckDB — SQL standar, tidak perlu mempelajari apa pun yang khusus untuk container

Agent membaca file log yang telah ditulis daemon. Agent tidak terhubung ke container, tidak membiarkan socket daemon terbuka untuk streaming, dan tidak pernah menulis atau merotasi file tersebut sendiri — jadi konektor yang terus berjalan tidak dapat mengubah perilaku host.

Dirancang sesuai cara kerja Container Logs.

Bagian tersulit adalah identitas, bukan penguraian

Driver json-file Docker menulis log setiap container ke direktori yang dinamai dengan ID 64 karakternya. Mengurai JSON itu mudah; mengetahui container mana yang dimaksud tidak, padahal itulah yang membuat tabel dapat digunakan.

  • Setiap baris memuat nama asli container, image-nya, dan layanan Compose-nya, yang dicocokkan dari daemon, bukan ditebak dari jalurnya.
  • Artinya, "kesalahan di layanan api pagi ini" cukup berupa klausa WHERE, bukan tabel pencarian yang harus Anda pelihara secara manual.
  • Stream juga dipertahankan, sehingga stdout dan stderr tetap dapat dibedakan, alih-alih digabungkan ke dalam satu kolom teks.
  • Baris yang sudah dihasilkan container yang dihapus tetap tersimpan — riwayatnya tidak ikut hilang bersama container.
-- Layanan mana yang paling ramai saat ini
SELECT   service, stream, COUNT(*) AS lines
FROM     fileset.events
WHERE    stream = 'stderr'
GROUP BY service, stream
ORDER BY lines DESC

Tiga hal, bukan satu

Log json-file daemon adalah bagian utama, tetapi bukan satu-satunya log container yang layak dikueri: ekspor docker logs yang disimpan secara manual memiliki format berbeda, dan Portainer menulis log servernya sendiri. Ketiganya memiliki profil, jadi Anda dapat memilih apa yang sedang dibaca tanpa berharap satu parser dapat menangani semuanya.

Format dan perilakunya, secara terperinci.

Buka referensi yang Anda perlukan untuk Container Logs.

Satu folder log kontainer menjadi satu tabel.
Ide besar

Satu folder log kontainer menjadi satu tabel.

Query Streams membaca file yang sudah ditulis daemon, menetapkan formatnya, dan menyediakan kolom bertipe dengan nama container di samping setiap baris. Tanpa sidecar, tanpa pipeline pengiriman, tanpa indeks yang harus dipelihara — dan baris yang tidak dapat dibaca parser tetap disimpan sebagai baris beserta alasannya, bukan diam-diam dibuang.

Folder logpada host
a3f9c1…-json.logBuruh pelabuhan
Buruh pelabuhanshopfront-stack_api.logekspor
portainer.logPortainer

Rotasi, arsip terkompresi, dan file yang dibaca ulang — ditangani

kontainer berisik.sqlSQL
PILIH aplikasi, layanan_komposisi,
       menghitung(*) AS garis
DARI   kumpulan file.kejadian
DI MANA  aliran = 'stderr'
KELOMPOKKAN BERDASARKAN aplikasi, compose_service
PESAN OLEH garis DESC
Hasilstderr berdasarkan kontainer
aplikasimelayanigaris
API tampilan tokoapi1,284
pekerja tokopekerja417
toko-webweb62
cache etalase tokocache3

Gabungkan dengan basis data aplikasi Anda dalam kueri yang sama.

File yang sudah ditulis oleh daemon, sekarang menjadi tabel yang dapat Anda gunakan untuk membuat laporan.

Dua alat, tiga format, tanpa kereta samping
Sumber

Dua alat, tiga format, tanpa kereta samping

Setiap kartu menyebutkan file persis yang dibaca Query Streams dan lokasi file tersebut. Anda tidak perlu mengubah driver logging agar ini berfungsi — file json adalah pengaturan default Docker, dan pengaturan default tersebut adalah yang didukung.

Log kontainer yang didukung

3 format · 2 alat
Logo Docker - Query Streams membaca log kontainer Docker json-file dan ekspor log docker. Buruh pelabuhandriver pencatatan file json
  • Satu {"log","stream","time"} amplop per baris, ditulis oleh daemon
  • Nama container berasal dari milik Docker sendiri config.v2.json di samping batang kayu
  • Proyek/layanan Image and Compose ikut serta sebagai kolom opini.
  • Biasanya /var/lib/docker/kontainer
  • Menambahkan; rotasi bernomor dan .gz diikuti
Logo Docker - Query Streams membaca log docker --timestamps mengekspor file Buruh pelabuhanekspor log docker
  • File yang Anda simpan dengan docker logs --timestamps
  • Stempel nanodetik RFC 3339, lalu baris milik container
  • Baris banner kontainer dilewati berdasarkan deklarasi, bukan karena keberuntungan.
  • Folder mana pun tempat Anda menyimpan file ekspor
  • Satu file per layanan; namanya diambil dari akar kata file tersebut.
Logo Portainer - Query Streams membaca log konsol zerolog server Portainer PortainerLog server, konsol zerolog
  • portainer.log atau keluaran milik container
  • Kode warna ANSI dihilangkan sebelum diuraikan, jadi satu level tetaplah satu level.
  • Itu kunci=nilai Ekornya menjadi kolom; sisanya mendarat di data
  • Baris server tunnel tertanam yang formatnya berbeda juga dibaca
  • Cap waktu dengan resolusi menit, dibaca sebagai UTC.
Lebih banyak yang datang.Ini baru permulaan, bukan batas atas.

Format log kontainer baru ditambahkan dengan setiap rilis Agent. Karena Agent selalu memperbarui diri, format yang ditambahkan belakangan akan muncul di konektor Anda tanpa perlu ada yang mengunjungi server.

Ketiga parser dibuat dan diuji menggunakan log container nyata — log json-file berukuran besar log docker ekspor dari host Swarm, dan log server Portainer CE 2.39.1. Satu hal yang perlu diketahui sejak awal: di Docker Desktop untuk Windows dan Mac, log json-file berada di dalam mesin virtualnya, sehingga Agent yang berjalan sebagai layanan tidak dapat menjangkaunya. Ekspor log tersebut dengan docker logs --timestamps dan gunakan profil kedua.
Kontainer di setiap wilayah, log dibaca di lokasi penyimpanannya
Di mana pun ia berjalan

Kontainer di setiap wilayah, log dibaca di mana mereka duduk

Kontainer jarang semuanya berjalan di satu tempat. Sebuah host di kantor, klaster Swarm di satu wilayah cloud, satu mesin di negara lain. Setiap lokasi menjalankan Network Agent yang membaca file log di lokasi penyimpanannya dan membuat koneksi keluar ke Query Streams. Dari sudut pandang firewall Anda, ini adalah koneksi keluar biasa — tidak ada yang perlu dibuka dan tidak perlu membuat VPN.

Kantor pusat Host Docker di disk lokal, log json-file di bawah folder daemon menelepon keluar
Uni Eropa Barat Gugusan Swarm, satu log docker ekspor per layanan menelepon keluar
AS-Timur Portainer mengelola sejumlah host, log servernya sendiri, dan menelepon keluar

Tiga koneksi keluar, satu tempat untuk menguerinya — tanpa port masuk, tanpa VPN, tanpa perubahan firewall

Satu agen per lokasi

Agent mencakup seluruh lokasi, bukan hanya satu folder: setiap format log yang ingin Anda gunakan di sana menjadi konektor File Set tersendiri pada Agent yang sama. Umumnya, satu Agent digunakan untuk setiap lokasi. Paket Free menjalankan satu Agent, sedangkan paket berbayar menjalankan lebih banyak.

1 situs = 1 Agen = banyak konektor

Tidak ada yang bisa dibuka

Agent membuat satu koneksi keluar terenkripsi, dan permintaan keluar serta baris data yang kembali sama-sama melewatinya. Tidak ada port masuk, tidak ada VPN, tidak ada perubahan firewall yang perlu diminta — dan kredensial tetap berada di dalam jaringan Anda.

satu koneksi, dua arah

Satu kueri lintas situs

Setiap sumber dalam sebuah kueri terfederasi menamai Agent-nya sendiri, sehingga satu pernyataan dapat membaca log di satu negara dan log di negara lain, lalu menghasilkan satu hasil — atau menggabungkan salah satunya dengan database. Termasuk dalam paket Business dan Enterprise.

2 negara → 1 kumpulan hasil

Mereka selalu memperbarui pengetahuan mereka.

Agen memperbarui diri secara otomatis, sehingga format log kontainer yang ditambahkan pada rilis selanjutnya mencapai setiap situs tanpa perlu ada yang masuk ke server untuk menginstalnya. Itulah yang membuat batasan di atas menjadi titik awal, bukan daftar tetap.

Format baru hadir bersama Agen.

Nama, jam, dan kode warna
Bagian tersulit

Nama, jam, dan kode warna

Log kontainer bukanlah file teks dengan tanggal di dalamnya. Tiga hal yang biasanya salah terjadi ketika Anda mencoba memperlakukannya sebagai data, dan masing-masing ditangani di sini dengan deklarasi daripada dengan tebakan.

Nama, bukan ID heksadesimal

Docker memberi nama setiap folder log berdasarkan ID kontainer, yang membuat kueri yang dikelompokkan menjadi sulit dibaca. Query Streams membaca catatan yang ditulis Docker di samping log dan mengambil nama sebenarnya, sambil mempertahankan ID sebagai kolom tersendiri.

a3f9c1…-json.log → app = shopfront-api

Jam daemon

Kontainer yang mencetak stempel waktunya sendiri dalam detik epoch akan tercatat pada tahun 1970 jika Anda memercayainya. Waktu peristiwa adalah waktu saat daemon menangkapnya; stempel waktu milik kontainer sendiri disimpan sebagai kolom, bukan dijadikan acuan.

waktu envelope → event_time

Kode warna dalam file

Logger konsol menulis urutan escape terminal langsung ke dalam log. Urutan tersebut dihapus sebelum penguraian, sehingga level terbaca sebagai level, bukan sebagai level yang dibungkus karakter escape — dan byte aslinya tetap tidak berubah.

kode escape dihapus → level = INF

Tidak ada yang dihitung dua kali.

Setiap berkas diberi sidik jari berdasarkan 4 KB pertamanya, sehingga berkas yang diputar dikenali sebagai berkas yang sama dan tidak dibaca ulang dari atas. Jendela duplikasi bergulir menangkap tumpang tindih ketika penulis memutar ulang bagian akhirnya.

hash prefiks 4 KB · jendela 20.000 rekaman

Kolom yang sebenarnya Anda dapatkan
Skema

Kolom yang sebenarnya Anda dapatkan

Bukan sekadar gumpalan teks dengan stempel waktu di sebelahnya. Setiap format diuraikan menjadi kolom bertipe yang dapat langsung Anda gunakan untuk memfilter, mengelompokkan, dan mengagregasi — dan jika kontainer mencatat JSON terstruktur, kolom-kolomnya juga diurai menjadi kolom.

Logo Docker
log kontainer file jsonDaemon Docker
sungai keciltingkatpencatatpesantuan rumahmelayanidata
Logo Docker
ekspor log dockerCLI Docker
pesan
Logo Portainer
log konsol zerologPortainer
tingkatpeneleponpesankesalahandata

Setiap baris juga membawa waktu_acara, stempel mentah yang dibaca, dan file asalnya. Setiap format menambahkan kolom identitasnya — aplikasi untuk file json dan Portainer, wadah untuk ekspor — dan baris json-file juga menyertakan gambar, menyusun proyek, layanan_komposisi dan ID kontainer. Yang tunggal pesan kolom pada ekspor memang disengaja: baris milik kontainer dipertahankan utuh, bukan ditebak-tebak.

Apa yang sengaja tidak dilakukan oleh hal ini

Apa yang sengaja tidak dilakukan oleh hal ini

Ini bukan live tail. Query Streams membaca file sebagaimana adanya di disk saat Anda menjalankan kueri, sehingga loop restart muncul sebagai baris, bukan sebagai aliran yang Anda pantau. Jika Anda membutuhkan peringatan di bawah satu detik pada sebuah baris saat dicetak, log pipeline adalah alat yang tepat.

Keluaran kontainer bersifat bebas, dan ada konsekuensi yang perlu disampaikan secara terus terang: apa pun yang dicetak aplikasi Anda, itulah yang masuk ke tabel. Jika aplikasi mencatat token atau email pelanggan, string tersebut sudah ada di file log dan juga akan ada di kolom. Tidak ada pemetaan header untuk mengecualikan data seperti pada log server web — perlakukan tabel yang dihasilkan dengan kehati-hatian yang sama seperti saat menangani file tersebut.

Dua batasan yang lebih kecil, disebutkan namanya dan bukan disembunyikan. Pada sebuah log docker ekspor, baris milik kontainer dipertahankan utuh dalam satu pesan kolom; penguraian ulang baris bagian dalam tersebut dengan formatnya sendiri belum tersedia. Atribut opsional yang dapat ditambahkan Docker menggunakan tag logging hanya dikenali berdasarkan strukturnya — tidak ada kontainer dalam korpus yang ditangkap yang menggunakannya, jadi jalur tersebut baru dideklarasikan, belum dibuktikan.

Selebihnya mengikuti desain standar. Agen terhubung keluar dan membaca file; tidak ada yang diinstal di dalam kontainer, tidak ada yang ditulis kembali, soket Docker dan API tidak pernah disentuh, dan akses hanya baca. Bidang retensi dimulai dari 30 hari untuk preset ini dan dapat Anda ubah.

Dari koneksi hingga hasil yang bermanfaat.

  1. Pasang Network Agent di host kontainer, tempat Agent dapat mengakses direktori log daemon's.
  2. Arahkan konektor ke sana. Log json-file setiap kontainer akan dicocokkan, dan Anda dapat mempersempit cakupannya dengan pola.
  3. Agent memetakan setiap direktori 64 karakter kembali ke kontainer yang bersangkutan — nama sebenarnya, image, dan layanan Compose — sehingga baris-barisnya mudah dibaca sebelum Anda menulis SQL.
  4. Setiap baris menjadi satu baris data, lengkap dengan stream-nya (stdout atau stderr) dan stempel waktu daemon's, dan rotasi diikuti sesuai rotasi yang dilakukan daemon.
  5. Lakukan kueri. Error di semua kontainer sekaligus, satu layanan secara terpisah, atau perbandingan sebelum dan sesudah deployment.

Manfaatkan hasil Container Logs Anda.

Satu koneksi melayani spreadsheet, aplikasi, dan alat AI Anda. Bagikan izin untuk menjalankan kueri tersimpan; penerima hanya melihat hasil yang diizinkan, sementara SQL dan login sumber tetap tersembunyi.

Untuk tim, vendor, dan mitra Anda

Bagikan hasil Container Logs langsung kepada siapa pun — kolega, vendor, mitra — sebagai kisi yang dapat ditandai dan menjalankan ulang kueri dengan data terbaru saat dibuka, di ponsel, tablet, atau komputer desktop. Mereka dapat melihat hasilnya, tetapi tidak pernah melihat SQL atau file.

Cara kerja Penampil Data

Untuk aplikasi dan sistem

Publikasikan kueri Container Logs sebagai endpoint JSON terautentikasi yang dapat dipanggil oleh aplikasi apa pun, lengkap dengan spesifikasi OpenAPI 3.1 dan koleksi Postman, Insomnia, serta Hoppscotch siap pakai. Tidak ada port database yang dibuka.

Jelajahi REST API

Tempelkan Power Query M yang dihasilkan ke Advanced Editor Power BI, lalu laporan akan membaca hasil Container Logs secara langsung melalui HTTPS — tanpa driver ODBC dan tanpa membuka port database.

Jelajahi Power BI

Untuk alat AI

Berikan akses hanya-baca ke Container Logs kepada asisten AI, beserta skema yang dibutuhkannya untuk menulis SQL yang benar — tanpa kredensial di dalam chat.

Jelajahi MCP

Dikirimkan kepada orang-orang

Gabungkan Container Logs dengan data Anda yang lain.

Satukan basis data, API bisnis, file, dan log dalam satu kueri hanya-baca. Setiap konektor mendukung Federated Queries.

Sebutkan koneksi dan tabel. Query Streams menangani kueri ke sumber dan menggabungkan hasilnya.

Jelajahi Federated Queries
Contoh kueri lintas sumber
-- tidak ada yang disalin, tidak ada yang digabungkan, tidak ada yang dijadwalkan
PILIH   c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
DARI     containerlogs.fileset.orders1 f
GABUNG     pg_crmpelanggan umum2      c ON c.id = f.customer_id
GABUNG     penagihan.stripe.faktur3      i ON i.customer = c.stripe_id
KELOMPOKKAN BERDASARKAN c.wilayah
PESAN OLEH ditagih DESC;

Gunakan nama koneksi, skema, tabel, dan kolom Anda sendiri.

Berlaku untuk seluruh rangkaian konektor.

Setiap konektor log juga menyediakan

  • events — satu baris untuk setiap baris yang diurai, dengan stempel waktu, kolom yang dinamai oleh tata bahasa, dan _source_file yang menunjukkan nama file asalnya.
  • events_raw_lines — baris yang tidak cocok dengan tata bahasa, disimpan apa adanya alih-alih dibuang, sehingga format yang tidak Anda antisipasi tetap bisa ditanyakan.
  • files_current dan files_events — inventaris aktif dan jejak audit: apa yang muncul, apa yang dirotasi, apa yang menghilang, dan apa pun yang ditahan, beserta nama file dan alasannya.
  • Rotasi dipahami, bukan diakali — sepuluh pola rotasi bernama ditambah file biasa yang tidak dirotasi, sehingga log kemarin dan arsip terkompresinya menjadi tabel yang sama dengan log hari ini.

Bagus untuk diketahui

  • Hanya-baca, diberlakukan — satu pernyataan setiap kali, hanya SELECT dan perintah sejenis. Log Anda tidak pernah kami tulis, pindahkan, rotasi, atau potong.
  • Tidak ada yang diunggah — baris diurai dan di-cache dalam keadaan terenkripsi, di mesin Anda sendiri, di samping agent. Hanya hasil kueri yang keluar dari jaringan Anda.
  • Hanya byte baru yang dibaca — agent melanjutkan dari posisi terakhir di setiap file, bukan membacanya ulang, sehingga log yang sibuk tidak makin membebani setiap hari.
  • Dialek SQL-nya adalah DuckDB — SQL yang sama seperti yang akan Anda gunakan untuk konektor lain.

Pertanyaan tentang Container Logs

Di mana saya dapat menggunakan hasil kueri Container Logs?

Gunakan hasil Container Logs di Excel, Google Sheets, Data Viewer, aplikasi Anda melalui Database REST API, serta alat AI melalui MCP atau Nova. Hasil tersimpan juga dapat menjadi sumber bagi tujuan Automation, laporan, dan peringatan yang didukung. Ketersediaan tujuan dan batas penggunaan bergantung pada paket Anda.

Apakah saya perlu membuka port masuk untuk Container Logs?

Tidak. Instal Network Agent di mesin yang dapat mengakses Container Logs. Agen terhubung ke Query Streams dari dalam jaringan; port masuk atau VPN tidak diperlukan. Sumber Anda tetap harus mengizinkan mesin agen untuk terhubung sesuai aturan aksesnya sendiri.

Apakah file Container Logs saya diunggah?

Network Agent membaca file di lokasi asalnya dan menyimpan cache di mesin agen. File sumber tidak diunggah, dipindahkan, atau ditulis ulang. Hanya hasil kueri yang diminta yang keluar dari jaringan Anda melalui koneksi terenkripsi keluar.

Apa yang saya perlukan untuk menghubungkan Container Logs?

Folder: Direktori log daemon di host container, atau folder yang menampung log hasil ekspor. Sumber: Log Docker json-file, ekspor log Docker yang disimpan, dan log server Portainer. Identitas: Nama container, image, dan layanan Compose yang diambil dari daemon, sehingga baris tidak menggunakan ID 64 karakter sebagai kunci. Rotasi: Diikuti saat daemon melakukan rotasi, ditambah sepuluh pola rotasi bernama untuk file yang diekspor

Dapatkah saya menggabungkan Container Logs dengan sumber lain yang terhubung?

Ya. Federated Queries mendukung semua jenis konektor, termasuk basis data, API bisnis, file, dan log. Sebutkan koneksi dan tabel dalam satu kueri hanya-baca. Query Streams menerjemahkan bagian kueri untuk sumber sesuai kebutuhan dan menggabungkan hasilnya. Lihat cara kerja Federated Queries.

Apakah saya perlu mengganti driver logging Docker saya?

TIDAK. file json adalah driver default Docker, dan merupakan driver yang didukung. Jika Anda belum pernah mengonfigurasi logging, file-file tersebut sudah tersedia dan formatnya sudah sesuai.

Jika Anda telah beralih ke pengemudi lain, maka docker logs --timestamps Ekspor adalah jalur masuknya: ini berfungsi apa pun drivernya, karena CLI membaca melalui daemon.

Bagaimana sistem mengetahui nama kontainer, bukan hanya ID-nya?

Docker menulis catatannya sendiri tentang sebuah kontainer di folder yang sama dengan log. Query Streams membaca nama dari file tersebut dan menggunakannya sebagai kolom identitas, dengan image, proyek Compose, dan layanan disimpan sebagai kolom di sampingnya. ID folder 64 karakter tersebut dipertahankan sebagai ID kontainer, jadi tidak ada yang hilang.

Jika rekaman itu tidak ada, tidak dapat dibaca, atau tidak memiliki nama, nama folder akan digunakan sebagai gantinya dan pemindaian menghitung berapa kali hal itu terjadi — sehingga penggunaan nilai fallback terlihat sebagai angka yang dapat Anda periksa, bukan penggantian diam-diam.

Saya menggunakan Docker Desktop untuk Windows atau Mac. Apakah ini berfungsi?

Tidak secara langsung terhadap log file JSON. Docker Desktop menyimpan log tersebut di dalam mesin virtualnya sendiri, dan Agen yang berjalan sebagai layanan di host tidak dapat mengaksesnya.

Cara untuk mengatasinya adalah melalui profil ekspor: docker logs --timestamps <container> dialihkan ke file, di folder mana pun yang dapat dibaca Agent. Ini adalah format yang didukung secara langsung, bukan solusi sementara — rute yang sama yang sudah digunakan orang untuk menyimpan salinan log setelah container tidak ada lagi.

Apakah ini waktu nyata?

Prosesnya berjalan sesuai permintaan, bukan secara streaming. File dibaca sebagaimana adanya saat kueri dijalankan, sehingga baris baru muncul saat container menulisnya dan file tersebut dibaca — bukan berdasarkan jadwal malam tetap, tetapi juga bukan tail langsung.

Untuk menanyakan pertanyaan beberapa minggu terakhir di setiap kontainer dan memasukkan jawabannya ke dalam spreadsheet, bentuk ini lebih praktis dan membutuhkan lebih sedikit mesin daripada tumpukan kayu gelondongan.

Bagaimana dengan Kubernetes atau Podman?

Keduanya tidak memiliki profil tersendiri saat ini, dan kami lebih suka mengatakan demikian daripada menyiratkan adanya cakupan. Yang berlaku adalah format ekspor: profil tersebut disesuaikan dengan bentuk yang tepat. docker logs --timestamps menulis — stempel waktu nanodetik RFC 3339, spasi, lalu baris milik container, satu file per layanan. Perangkat yang menulis dalam format yang sama dapat membacanya.

Cara yang andal untuk mengetahuinya pada file Anda sendiri adalah dengan menggunakan fitur Uji koneksi, yang akan melaporkan apa yang dikenali sebelum Anda melakukan apa pun.

Kontainer saya mencatat data dalam format JSON. Apakah saya bisa mendapatkan field-fieldnya sebagai kolom?

Ya, untuk log json-file. Envelop daemon dibuka, lalu JSON milik container di dalamnya diratakan menjadi kolom — level, logger, message, host, dan service jika tersedia. Apa pun yang tidak cocok dengan kolom bernama akan disimpan dalam sebuah data alih-alih dibuang, sehingga kolom yang tidak biasa pun masih dapat dicari.

Satu hal yang tidak diambil dari JSON container adalah stempel waktunya. Stempel waktu itu berasal dari daemon, karena stempel waktu aplikasi dapat menggunakan format apa pun dan kesalahan dalam membacanya dapat diam-diam menempatkan baris pada waktu yang keliru.

Bagaimana dengan baris yang tidak dapat dibaca oleh parser?

Data tersebut dipertahankan, bukan dihapus. Baris yang tidak sesuai dengan format yang disematkan akan tetap disimpan sebagai baris mentah dengan alasan yang terlampir, sehingga entri yang salah format atau perubahan format yang tidak terduga akan muncul sebagai sesuatu yang dapat Anda lihat dan periksa, bukan sebagai celah tersembunyi dalam angka Anda.

Gunakan Container Logs di tempat pekerjaan berlangsung.

Mulai dengan Free: semua jenis konektor, 2 sumber data, dan 1 Network Agent. Tambahkan kuota paket seiring bertambahnya kebutuhan Anda.