Bloga dön
·9 dk okuma·productdevbook

macOS Ağ Kullanım Verisi Nasıl Dışa Aktarılır

macOS ağ kullanım verisini dışa aktarmanın ve analiz etmenin yolları: yerleşik komutlar, yaygın formatlar ve işe yarayan tek satırlık komutlar.

  • Developer tools
  • macOS
  • Bandwidth
  • Tutorial

Sonunda artışı yakaladınız. Üç gündür ev internet kullanımınızın neden rastgele saatlerde sıçradığını merak ediyordunuz ve sonunda doğru anda görmek için açık bir aracınız var. Şimdi ne olacak? Bu veriyi canlı arayüzden çıkarıp analiz edebileceğiniz, bir meslektaşla paylaşabileceğiniz veya bir sunucu günlüğüne karşı ilişkilendirebileceğiniz bir şeye almak istiyorsunuz. export macos network usage yeteneği insanların düşündüğünden daha önemlidir ve macOS, nereye bakacağınızı bildiğinizde iyi seçeneklere sahiptir.

Bu yazı pratik yolları gezer: kısa yakalamalar için nettop -L, sistem tarafı ağ olayları için birleştirilmiş günlük, CSV için örnekleme komut dosyaları ve ova'nın verisini diskte nerede sakladığı.

Neden export macos network usage

Birkaç gerçek durum:

  • Anomali araştırması — saat 03'te 2 GB'lık bir yükleme gördünüz, gece boyunca kaynak süreci grafiklemek istiyorsunuz.
  • Kapasite planlaması — ölçülü veya sınırlı bir bağlantıdasınız (Starlink Roam, otel Wi-Fi, mobil tethering) ve neyin açık bırakılmasının güvenli olduğunu bilmek istiyorsunuz.
  • Performans hata ayıklama — sunucu takımınız yavaş isteklerin ne zaman başladığını soruyor ve istemci tarafı ağ kullanımını sunucu günlüklerinin üzerine bindirmek istiyorsunuz.
  • Proje başına bant genişliği bütçeleme — müşterilere saatlik fatura kesiyorsunuz ve dün yapı boru hatlarının ne yüklediği konusunda bir akıl kontrolü istiyorsunuz.
  • Merak — sadece kendi verilerinize bakmak istiyorsunuz.

Bunların hepsi için "Activity Monitor'u açıp bakmak" yetmez. Manipüle edebileceğiniz bir formatta diskte veriye ihtiyacınız var.

Seçenek 1: nettop günlük modu

En basit dışa aktarma yolu yerleşiktir. nettop -L <count>, <count> örnek için günlük modunda çalışır, her örneği bir metin satırı olarak boşaltır ve çıkar. Sütunları seçmek için -J ve aralığı ayarlamak için -s ile birleştirildiğinde, bir dosyaya yönlendirebileceğiniz temiz çıktı elde edersiniz.

nettop -L 600 -s 1 -P -J bytes_in,bytes_out,interface,state \
  > ~/Desktop/nettop-10min.txt

Bu, bir saniyelik aralıklarla 600 örnek — on dakikalık yakalama. Her örnek, istediğiniz sütunlarla her etkin süreci listeler.

Çıktı tam olarak CSV değil — örnek başına bir başlığı, örnekler arasında boş satırları ve boşluklu süreç adları var. Ama ayrıştırılabilir. Kısa bir awk veya Python komut dosyası onu temiz bir tabloya dönüştürür.

nettop günlüklemesinin sınırları

  • Yalnızca çalışırken yakalar. Dün ne olduğunu bilmek istediyseniz, şanssızsınız.
  • Varsayılan olarak süreç-başlangıcından-bu-yana kümülatif raporlar; deltaları kendiniz hesaplarsınız.
  • Yardımcı süreçler ayrı satırlar olarak görünür (katlama yok).
  • Örnek formatı birinci sınıf CSV değildir; bir ayrıştırıcı yazmayı bekleyin.

Belirli bir zaman penceresinin geçici yakalamaları için — "GitHub'a göndermek üzereyim, etrafında beş dakika yakalayayım" — nettop -L harikadır. Sürekli veri için başka bir şey istersiniz.

Seçenek 2: birleştirilmiş günlük

macOS'un birleştirilmiş günlüğü, ağ dahil sistem çerçevelerinden yapılandırılmış olayları yakalar. CFNetwork (URLSession katmanı) ve Network.framework her ikisi de bağlantı yaşam döngüsü, TLS el sıkışması, yeniden denemeler ve hatalar için günlük satırları yayar. Bunları olaydan sonra çıkarabilirsiniz.

Şimdi orada ne olduğunu görmek için, son saati sorgulayın:

log show --last 1h --predicate 'subsystem == "com.apple.CFNetwork"' \
  --info --debug

Bir dosyaya dışa aktarmak için:

log show --last 24h --predicate 'subsystem == "com.apple.CFNetwork"' \
  --style compact > ~/Desktop/cfnetwork-day.log

Yararlı yüklemler:

  • subsystem == "com.apple.CFNetwork" — URLSession istekleri, TLS, yönlendirmeler
  • subsystem == "com.apple.network" — Network.framework yol değişiklikleri, bağlantı durumu
  • process == "YourApp" — bir uygulama ile sınırla
  • eventMessage CONTAINS "443" — günlük mesajları içinde metin araması

Birleştirilmiş günlük, hacme bağlı olarak kabaca son birkaç günlük sistem olaylarını tutar. Bayt muhasebesi için tasarlanmamıştır — olay denetimi için tasarlanmıştır. Ancak sorunuz "api.example.com'a bağlantı 14:23'te başarısız oldu mu" ise, birleştirilmiş günlük bilir.

log show vs log stream

log show geçmiş günlüğü okur. log stream yeni olayları canlı olarak izler. Bir terminali çalışır halde bırakmak ve olaylar olduğunda izlemek istediğinizde log stream kullanın:

log stream --predicate 'subsystem == "com.apple.network"' --level debug

Yuvarlanan bir yakalamayı eklemek için >> ile bir dosyaya yönlendirin.

Seçenek 3: özel bir örnekleme komut dosyası

Süreç başına bant genişliğinin CSV çıktısını istiyorsanız — çoğu insanın gerçek hedefi — onu 20 satır kabuk içinde inşa edebilirsiniz. Fikir: her N saniyede bir yokla, kümülatif bayt sayılarının farkını al, CSV yay.

#!/usr/bin/env bash
# Naive per-process bandwidth sampler.
INTERVAL=5
echo "timestamp,pid,process,delta_in,delta_out"
declare -A prev_in prev_out
while true; do
  ts=$(date +%s)
  while IFS=, read pid name in_bytes out_bytes; do
    pi=${prev_in[$pid]:-0}
    po=${prev_out[$pid]:-0}
    di=$((in_bytes - pi))
    do_=$((out_bytes - po))
    if (( di > 0 || do_ > 0 )); then
      echo "$ts,$pid,$name,$di,$do_"
    fi
    prev_in[$pid]=$in_bytes
    prev_out[$pid]=$out_bytes
  done < <(nettop -P -L 1 -J pid,interface,bytes_in,bytes_out 2>/dev/null \
            | awk 'NR>2 {print $2","$1","$3","$4}')
  sleep $INTERVAL
done

Bu bir taslak — üretim kodu süreç çıkışlarını, yardımcı süreç katlamasını, günlük rotasyonunu ve nettop'un çıktı formatının ayrıştırması sıkıcı olduğu gerçeğini ele alırdı — ancak şekli gösterir. Örneklersin, fark alırsın, CSV yayarsın. Uykudan kurtulmasını istiyorsanız caffeinate altında veya bir launchd ajanı olarak çalıştırın.

ova'yı eylemde görün

Bir bakışta görülebilir bir menü çubuğu bant genişliği izleyicisi — yerel, imzalanmış, ~3 MB.

Download for macOS

Seçenek 4: ova'nın yerel veritabanı

Amaç için inşa edilmiş bir bant genişliği izleyicisi sizi yukarıdaki komut dosyasını yazmaktan kurtarır. ova bir SQLite veritabanını şurada tutar:

~/Library/Application Support/ova/

İçerik, arayüzde gördüğünüz aynı zaman serisi verisidir: uygulama başına gelen ve giden baytlar, kabaca 1 Hz'de örneklenmiş, üst uygulama altında katlanmış yardımcı süreçlerle. Yereldir, bulut senkronizasyonu yok, telemetri yok. Dosya sizindir.

SQLite olduğu için, SQLite okuyabilen her şey okuyabilir: sqlite3 CLI, Python'un sqlite3 modülü, DB Browser for SQLite veya DuckDB'de hızlı bir sorgu. Yapabilirsiniz:

  • Tüm geçmişi tek bir komutla CSV'ye dışa aktarın
  • Toplulaştırmalar çalıştırın ("hangi uygulama bu hafta saatlik en çok bant genişliği kullandı")
  • Kendi günlüklerinize karşı birleştirin (yapı boru hatları, sunucu erişim günlükleri, takvim olayları)
  • Normal yedekleme hedefinize yedekleyin

sqlite3 kullanarak CSV'ye tipik bir dışa aktarma:

sqlite3 -header -csv \
  ~/Library/Application\ Support/ova/<file>.sqlite \
  "SELECT timestamp, app, bytes_in, bytes_out FROM samples \
   WHERE timestamp > strftime('%s','now','-7 days') \
   ORDER BY timestamp" > ~/Desktop/last-week.csv

Pratik tarifler, birleştirmeler ve gizlilik

Bir CSV'niz olduğunda — herhangi bir kaynaktan — birkaç sorgu çabaya değer.

Haftaya göre üst uygulamalar

SELECT app,
       SUM(bytes_in) / (1024*1024) AS mb_down,
       SUM(bytes_out) / (1024*1024) AS mb_up
  FROM samples
 WHERE timestamp > strftime('%s','now','-7 days')
 GROUP BY app
 ORDER BY (mb_down + mb_up) DESC
 LIMIT 20;

Neredeyse her zaman net bir hikaye anlatır. En üstte tarayıcı, ortada senkronizasyon uygulamaları, en altta sistem hizmetleri.

Saatlik ısı haritası

SELECT strftime('%H', timestamp, 'unixepoch', 'localtime') AS hour,
       SUM(bytes_in + bytes_out) / (1024*1024) AS mb
  FROM samples
 WHERE timestamp > strftime('%s','now','-30 days')
 GROUP BY hour
 ORDER BY hour;

Trafiğinizin ne zaman zirve yaptığını gösterir. Çoğu insan için: sabah 09, öğleden sonra 13 ve 16, gece boyunca uzun bir bulut senkronizasyon kuyruğuyla.

Anomali tespiti

SELECT app,
       date(timestamp, 'unixepoch', 'localtime') AS day,
       SUM(bytes_out) / (1024*1024) AS mb_up
  FROM samples
 GROUP BY app, day
HAVING mb_up > 500
 ORDER BY mb_up DESC;

500 MB'tan fazla yükleme yapan herhangi bir uygulama-gününü işaretler. Bir avuç normaldir (ağ hedefine Time Machine, fotoğraf senkronizasyonu, büyük dosya transferleri). Tanıdık olmayan uygulamaların tam bir listesi araştırmaya değer.

Yerel SQLite geçmişi
ova kabaca 1 Hz'de uygulama başına bant genişliğini örnekler ve onu ~/Library/Application Support/ova/ içindeki bir SQLite dosyasında saklar. Başka bir veritabanı için kullanacağınız aynı araçlarla sorgulayabilirsiniz.

Kaynakları birleştirme

En güçlü iş akışı aynı anda birden fazla kaynak kullanır.

  • Bayt muhasebesi için ova — ne kullanıldı, hangi uygulama tarafından, ne zaman
  • Olaylar için birleştirilmiş günlük — bağlantılar ne zaman başladı, başarısız oldu, yeniden denedi
  • Hat için tcpdump — bir şey gerçekten gizemli olduğunda

Bunları zaman damgasına göre birleştirebilirsiniz. ova 03:14'te cloudd'un 200 MB'lık bir yüklemesini gösteriyorsa, birleştirilmiş günlük cloudd'un neyi senkronize ettiğini gösterir ve (paket yakalama çalışıyorsa) tcpdump'ın hedef IP alanı bunun iCloud olduğunu doğrular.

Gizlilik üzerine bir not

Ağ verisini dışa aktaran her şey paylaşmak istemediğiniz bilgileri sızdırabilir. Ana bilgisayar adları, hatta birleştirilmiş günlükteki yollar, hangi hizmetleri kullandığınızı açığa çıkarabilir. Günlükleri bir meslektaşa göndermeden veya bir sohbete yapıştırmadan önce:

  • Ev ağınızı tanımlıyorlarsa IP adreslerini çıkarın
  • Kişisel hizmetleri açığa çıkaran ana bilgisayar adlarını redakte edin
  • Reklamını yapmak istemediğiniz uygulamaları açığa çıkaran süreç adlarını kaldırın

Bu, yalnızca yerel araçların önemli olmasının da nedenidir. ova verinizi hiçbir yere göndermez — diskinizde kalır. Ne dışa aktaracağınız sizin kararınızdır.

Toparlarken

Mac ağ kullanımı verilerini dışa aktarmak için birkaç makul yolunuz var: kısa yakalamalar için nettop -L, olay denetimi için birleştirilmiş günlük, tam kontrol için özel örnekleme komut dosyaları ve sürekli uygulama başına muhasebe için ova gibi yerel SQLite destekli bir izleyici. Olaylara veya baytlara ihtiyacınız olup olmadığına ve hangi pencere sizi ilgilendirdiğine göre seçin.

Sürekli yakalayan ve daha sonra sorgulamanıza izin veren düşük çabalı bir yol için, ova'yı yükleyin — yaklaşık 3 MB, macOS 14+, Apple Silicon ve Intel, kabaca 1 Hz'de örnekler. Veriler ~/Library/Application Support/ova/ dizininizde SQLite'ta yaşar, bu yüzden zaten bildiğiniz herhangi bir analiz aracı onu okuyabilir.