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.txtBu, 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 --debugBir dosyaya dışa aktarmak için:
log show --last 24h --predicate 'subsystem == "com.apple.CFNetwork"' \
--style compact > ~/Desktop/cfnetwork-day.logYararlı yüklemler:
subsystem == "com.apple.CFNetwork"— URLSession istekleri, TLS, yönlendirmelersubsystem == "com.apple.network"— Network.framework yol değişiklikleri, bağlantı durumuprocess == "YourApp"— bir uygulama ile sınırlaeventMessage 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 debugYuvarlanan 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
doneBu 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.
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.csvPratik 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.
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.