Kendi Sunucunuzda Web Analitiği Kurulumu ve VPS Seçimi
Plausible, Umami, Matomo, GoatCounter ve GoAccess araçlarını VPS üzerinde barındırırken RAM kullanımı, veritabanı tercihi, disk yönetimi ve reklam engelleyici sorunlarını inceleyin.
Bir VPS üzerinde hangi self-hosted web analitiği aracı çalıştırılmalıdır?
Self-hosted web analitiği iki aileye ayrılır ve yanlış aileyi seçmek, yanlış ürünü seçmekten daha maliyetlidir. Bir aile, ziyaretçinin tarayıcısında küçük bir betik çalıştırır ve bu betiğin raporladığı verileri saklar. Diğer aile ise web sunucunuzun halihazırda yazdığı erişim günlüklerini (access log) okur. Veritabanı ve ihtiyaç duyulan bellek miktarı dahil olmak üzere sonraki tüm gereksinimler, bu temel tercihe göre şekillenir.
Küçük bir sunucu için kısa cevap şudur: GoatCounter ve Medama, her biri tek bir dosya üzerinde çalışan tek bir süreç olduklarından 1 GB RAM ile çalışabilirler. Umami, bir Postgres container'ı ekler ve teknik bilgisi olmayan birinin de okuyabileceği bir kontrol paneli sunar. Plausible Community Edition ve Rybbit, ClickHouse kullandıkları için en az 2 GB RAM planlanmalıdır. Matomo tam kapsamlı bir üründür ve trafiğinize uygun boyutta bir sunucu gerektirir. GoAccess ise halihazırda var olan bir günlüğü okuduğu için sayfaya hiçbir ek yük getirmez.
Script etiketi veya sunucu günlüğü: her biri neleri görebilir
Bir script etiketi tarayıcıları ölçümler. Sayfa yüklenir, script çalışır ve toplayıcınıza bir istek gönderir. Bu zinciri kıran her şey sizin için görünmezdir: JavaScript'in kapalı olması, isteği engelleyen bir filtre listesi, toplayıcıya gönderilen başarısız bir istek veya script çalıştırmayan bir tarayıcı (crawler).
Bir günlük ayrıştırıcı (log parser) ise istekleri ölçümler. Web sunucunuz, siz herhangi bir şey kurmasanız dahi her istek için bir satır yazar; dolayısıyla veriler zaten diskte mevcuttur. Bu yöntem, her tarayıcıyı ve script etiketi içermeyen dosyalara yapılan her erişimi görür. Ancak tarayıcı içinde ne olduğunu göremez; ayrıca tarayıcı önbelleğinden veya sunucunuzun önündeki bir CDN (içerik dağıtım ağı) üzerinden sunulan bir sayfayı da göremez, çünkü bu istek sunucunuza asla ulaşmaz.
İki sayı birbiriyle eşleşmeyecektir ve ikisi de yanlış değildir. Matomo her iki yöntemi de uygulayabilir ve günlük içe aktarma işleminin, JavaScript izleyicisine kıyasla hangi verilerden vazgeçtiğini belgeler: ekran çözünürlüğü ve sayfa başlıkları, etkinlikler, içerik takibi, ısı haritaları, oturum kayıtları ve form analizleri. Bu liste, tarayıcılar yerine istekleri saymanın bedelidir.
Bot trafiği, aradaki farkın diğer yarısını oluşturur. Günlük tabanlı sayımlar, siz filtrelemedikçe tarayıcıları da içerir ve sıradan bir sitede tarayıcı payı, vardığınız sonuçları değiştirecek kadar büyüktür. Hem GoAccess hem de Matomo'nun günlük içe aktarma özelliği, bilinen botları filtreler. Ancak hiçbiri, user agent bilgisini yalanlayan bir tarayıcıyı filtreleyemez; bu durum, günlük tabanlı her türlü sayımı sunucu seviyesinde yapay zeka tarayıcılarını engelleme işlemiyle eşleştirmek ve günlüğü engelleme işleminden önce değil, sonra okumak için iyi bir nedendir.
GoAccess: mevcut günlük kayıtlarınızdan analizler
Dağıtım paketleri sürümlerin gerisinde kaldığı için kurulumu projenin kendi Debian ve Ubuntu deposundan yapın.
wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt-get update
sudo apt-get install goaccessArdından aracı günlük dosyasına yönlendirin ve statik bir rapor oluşturun.
goaccess /var/log/nginx/access.log -o ~/report.html --log-format=COMBINEDBu komut, normal bir kullanıcı için Permission denied hatasıyla başarısız olur; çünkü Ubuntu üzerinde nginx günlük dosyasının sahibi root kullanıcısıdır ve dosya adm grubuna aittir. sudo usermod -aG adm $USER komutuyla kendinizi bu gruba ekleyin, ardından oturumu kapatıp tekrar açın; çünkü grup üyeliği oturum açma sırasında okunur. id komutunu çalıştırın ve tekrar denemeden önce listenin içinde adm ifadesinin göründüğünü doğrulayın.
Canlı günlük kaydı üzerindeki bir rapor, yalnızca logrotate tarafından henüz taşınmamış verileri kapsar. Dünkü istekler access.log.1 içinde yer alır ve daha eski olanlar sıkıştırılmıştır; bu nedenle haftalık bir görünüm için döndürülmüş (rotated) dosyaların da okunması gerekir.
zcat /var/log/nginx/access.log.*.gz | goaccess - --log-format=COMBINED -o ~/last-week.htmlAyrıca, sayfayı bir WebSocket üzerinden güncelleyen --real-time-html adlı bir canlı mod da mevcuttur. Bu mod, ikinci bir port ve kendine ait bir proxy kuralı gerektirir. Çoğu site için cron tarafından saatlik olarak oluşturulan bir rapor yeterlidir ve güvenliğinin sağlanması daha kolaydır.
GoatCounter: tek bir Go binary dosyası ve bir SQLite dosyası
GoatCounter, statik olarak derlenmiş bir binary dosyası olarak dağıtılır; bu nedenle kurulması gereken bir çalışma zamanı (runtime) yoktur. Sürüm sayfasından bir derleme alıp çalıştırın veya imajı kullanın.
docker run -p 8080:8080 -v goatcounter-data:/home/goatcounter/goatcounter-data arp242/goatcounterBinary olarak çalıştırıldığında goatcounter serve, 8080 numaralı portu dinler ve ./goatcounter-data/db.sqlite3 konumunda bir SQLite dosyası oluşturur. Örnek bir proxy arkasındaysa, ilk siteyi web sihirbazı yerine komut satırından oluşturun.
goatcounter db create site -vhost=stats.example.com -user.email=me@example.comgoatcounter serve -listen=:443 -tls=tls,rdr,acme kullanarak, ACME (otomatik sertifika yönetim ortamı) ile kendi sertifikasını yönetebilir; bu, başka hiçbir servisin çalışmadığı sunucularda kullanışlıdır. Eğer nginx veya Caddy halihazırda 443 numaralı portu kullanıyorsa, GoatCounter'ı 8080 portunda bırakın ve trafiği ona yönlendirin. İzleme betiği, projenin kendi verilerine göre yaklaşık 3.5K boyutundadır ve JavaScript içermeyen sayfalar için bir izleme pikseli mevcuttur. Yoğun bir sitede SQLite bir darboğaz haline gelirse, aynı binary dosyası goatcounter serve -db 'postgresql+dbname=goatcounter' ile Postgres desteği de sunar. Yedekleme işlemi bir dosya kopyalamadan ibarettir; bu tür bir aracın en büyük avantajı da budur.
Medama: 256 MB bellek gerektiren tek bir container
Medama, bu alandaki en yeni tek ikili dosya (single binary) seçeneğidir. Tasarımı gereği çerez kullanmaz ve proje, 1 KB'tan küçük bir takipçi boyutu ile 256 MB belleğe sahip sanal makinelerde çalışan küçük siteleri desteklediğini belirtir. Bunlar projenin yayınladığı iddialardır; bu rehber için ölçülmüş değerler değildir.
docker volume create medama-data
docker run -d -p 127.0.0.1:8080:8080 -v medama-data:/app/data ghcr.io/medama-io/medama:latestResmi komut, portu 8080:8080 olarak yayınlar. Yukarıdaki loopback ön eki bilinçli olarak eklenmiştir; reverse proxy bölümünde bunun nedeni açıklanmaktadır. İlk giriş admin kullanıcı adı ve CHANGE_ME_ON_FIRST_LOGIN parolası ile yapılır; parolanın adı aslında bir talimattır.
Belgelenmiş bir hata durumu ile karşılaşabilirsiniz. Giriş işlemi yalnızca HTTPS üzerinden veya localhost adresinde çalışır. Bu nedenle, proxy kurulumunu sertifikadan önce tamamlarsanız, form doğru parolayı reddeder ve hata nedeni ekrana yazdırılmaz. Önce TLS (transport layer security) kurulumunu tamamlayın, ardından giriş yapın.
Umami: Postgres ve herkesin tanıdığı bir panel
git clone https://github.com/umami-software/umami.git
cd umami
docker compose up -dBu komut, uygulamayı yanında bir PostgreSQL container'ı ile birlikte 3000 numaralı portta başlatır. Dokümantasyon, minimum gereksinim olarak PostgreSQL v12.14 sürümünü, kaynak koddan derleme yapacaksanız Node.js 18.18 veya daha yeni bir sürümü şart koşar. Halihazırda çalıştırdığınız bir veritabanına işaret etmesi gereken DATABASE_URL değişkenine ihtiyaç duyan docker.umami.is/umami-software/umami:postgresql-latest adlı önceden oluşturulmuş bir imaj mevcuttur.
İlk giriş bilgileri admin kullanıcı adı ve umami parolasıdır. DNS kayıtlarını sunucuya yönlendirmeden önce parolayı mutlaka değiştirin; çünkü kayıt çözümlendiği ve proxy yanıt vermeye başladığı anda instance internet üzerinden erişilebilir hale gelir. Compose detayları, environment dosyaları ve yeniden başlatma politikaları için, okumadığınız bir stack'i kopyalamak yerine bir VPS üzerinde Docker Compose stack'i konusuna bakın.
Sistem üzerindeki iz, bir Node süreci ve Postgres'ten oluşur. Bu yapı, tek bir binary dosyadan daha ağır, ancak ClickHouse çalıştıran herhangi bir sistemden çok daha hafiftir.
Plausible Community Edition: ClickHouse RAM alt sınırı
git clone -b v3.2.1 --single-branch https://github.com/plausible/community-edition plausible-ce
cd plausible-ce
touch .env
echo "BASE_URL=https://stats.example.com" >> .env
echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env
docker compose up -dv3.2.1 sürümü Ağustos 2026 itibarıyla günceldir ve clone komutu bu sürümü özellikle sabitler. Yığın üç parçadan oluşur: uygulama, hesaplar ve ayarlar için Postgres ve etkinlik verileri için ClickHouse. SECRET_KEY_BASE en az 64 baytlık bir dizge olmalıdır; openssl çağrısı da tam olarak bunu üretir.
Plausible'ın kendi gereksinimleri, ClickHouse ve uygulamanın out of memory killer ile karşılaşmaması için en az 2 GB RAM ve ClickHouse'un ihtiyaç duyduğu SSE 4.2 veya NEON destekli bir işlemci talep eder. Bu ikinci gereksinimi satın alma öncesinde kontrol etmek önemlidir; bu, ARM ve x86 VPS seçimi arasındaki pratik farklardan biridir. ClickHouse ayrıca kullanılabilir olduğunu düşündüğü tüm belleği kullanmaya meyillidir; bu nedenle paylaşımlı bir sunucuda, Compose içinde container bellek sınırlandırma bölümünde açıklandığı gibi bir üst sınır belirleyin.
BASE_URL, genel URL ile tam olarak eşleşmelidir. Eşleşmediği durumlarda giriş yaparsınız, uygulama sizi yanlış ana makineye yönlendirir ve oturum çerezi tarayıcınızın üzerinde olmadığı bir alan adı için yazılır; sonuç olarak hiçbir hata mesajı almadan tekrar giriş formuna dönersiniz.
Dağıtılan compose dosyası bir port yayınlamaz, çünkü ön tarafta bir proxy olması beklenir. Varsayılan uygulama portunu yalnızca loopback üzerinde yayınlayan bir geçersiz kılma (override) ekleyin.
cat > compose.override.yml << EOF
services:
plausible:
ports:
- 127.0.0.1:8000:8000
EOFMatomo: ürünün tamamı ve gereksinim duyduğu sunucu
Matomo, PHP üzerinde MySQL veya MariaDB ile çalışır; bu da onun container yığınından ziyade klasik web yığınına uygun olduğu anlamına gelir. Ayrıca bu listede trafik hacmine göre donanım kılavuzu yayınlayan tek araçtır.
The data behind this chart
[
{
"label": "100K/month",
"cpu_cores": 2,
"ram_gb": 2,
"disk_gb": 50
},
{
"label": "1M/month",
"cpu_cores": 4,
"ram_gb": 8,
"disk_gb": 250
},
{
"label": "10M/month",
"cpu_cores": 8,
"ram_gb": 16,
"disk_gb": 400
}
]Bunlar, bu kılavuz için yapılan ölçümler değil, Matomo'nun Ağustos 2026 itibarıyla yayınladığı minimum gereksinimlerdir. Aylık 100.000 sayfa görüntülemesine kadar 2 CPU çekirdeği, 2 GB RAM ve 50 GB SSD talep eder ve tek bir sunucu hem uygulamayı hem de veritabanını barındırır. 1M/month seviyesinde bu gereksinim 8 GB RAM ve 250 GB diske çıkar. 10M/month seviyesinde Matomo iki sunucu önerir; son satır veritabanı sunucusunu gösterir: 16 GB RAM ve 400 GB disk. Bu disk değerlerini, tüm veri kümesinin tek bir SQLite dosyası olduğu ikili seçeneklerin yanında değerlendirin.
Arşivleme, kullanıcıları şaşırtan kısımdır. Matomo varsayılan olarak raporlarını birisi kontrol panelini açtığında oluşturur; bu nedenle veri büyüdükçe kontrol paneli yavaşlar ve sonunda zaman aşımına uğrar. Belgelenmiş çözüm, genel ayarlardan tarayıcı tetiklemeli arşivlemeyi kapatmak ve arşivleyiciyi cron üzerinden, Matomo dosyalarının sahibi olan kullanıcı ile Matomo dizininden çalıştırmaktır.
php console core:archive --url=https://analytics.example.comMatomo ayrıca işlenmiş rapor tablolarının yanında ham günlük tablolarını da tutar ve eski ham verileri ve eski raporları bir takvime göre silebilir. Bu özelliği disk dolduğunda değil, kurulum sırasında etkinleştirin. Matomo aynı zamanda sunucu erişim günlüklerini de içe aktarabilir; bu da onu burada her iki aileyi de aynı anda kapsayan tek ürün yapar.
Rybbit ve yeni nesil yığınlar
git clone https://github.com/rybbit-io/rybbit.git
cd rybbit
chmod +x *.sh
./setup.sh your.domain.nameRybbit, modern bir arayüze sahip yeni bir projedir. Kurulum betiği, environment dosyasını oluşturur ve Docker Compose ile yığını ayağa kaldırır. ClickHouse çalıştırır ve kendi web sunucusu olarak Caddy ile gelir; bu sunucu 443 numaralı portu alır ve belirttiğiniz alan adı için sertifika talep eder. Nginx'in halihazırda 443 numaralı portu kullandığı bir sunucuda, betik portu bağlayamayacaktır; bu nedenle projenin manuel Compose yöntemini kullanın ve servisi mevcut proxy'nizin arkasına konumlandırın. Belgeler, ClickHouse gereksinimi nedeniyle en az 2 GB RAM, Ubuntu 24 LTS üzerinde test edildiğini ve ARM mimarisinde ARMv8.2-A veya daha yeni bir sürüm gerektiğini belirtmektedir.
Her genç proje için dürüst uyarı: özellikler hızla eklenir ve buna bağlı olarak köklü değişiklikler de yaşanabilir. Bir sürüm etiketi sabitleyin, güncelleme yapmadan önce sürüm notlarını okuyun ve mutlaka veritabanı yedeği alın.
Saklama süresi ve disk büyümesi: kendi sunucunuzda ölçüm yapın
Disk büyümesi, aracın her olay için ne kadar veri depoladığına bağlıdır. GoatCounter, isabetleri sayaçlarda toplar; bu nedenle dosya boyutu ham trafik hacminden ziyade benzersiz sayfa ve gün sayısına göre artar. Umami ve Matomo her olay için satırlar depolar; Matomo ayrıca ham verilerin üzerine işlenmiş rapor tabloları ekler. ClickHouse olayları sütunlar halinde depolar ve yüksek oranda sıkıştırır; Plausible'ın satır tabanlı bir veritabanını zorlayacak hacimlerle başa çıkabilmesinin nedeni budur.
Bu kılavuz, milyon sayfa görüntüleme başına megabayt cinsinden bir rakam yayınlamamaktadır çünkü sizin trafiğiniz üzerinde bir ölçüm yapılmamıştır. Ölçümü kendiniz yapın. Servis ve kullanıcı adlarını kendi Compose dosyanıza uyacak şekilde düzenleyin.
du -h goatcounter-data/db.sqlite3
docker compose exec db psql -U umami -d umami -c "SELECT pg_size_pretty(pg_database_size('umami'));"
docker compose exec plausible_events_db clickhouse-client -q "SELECT formatReadableSize(sum(bytes_on_disk)) FROM system.parts WHERE active"Rakamı kaydedin, bir hafta bekleyin, tekrar kaydedin ve aradaki farkı o hafta için panelde raporlanan sayfa görüntüleme sayısına bölün. Bu rakam sitenize ve bot filtrelemenize özeldir, dolayısıyla yayınlanmış herhangi bir ortalamadan daha değerlidir. Ardından, rakam henüz küçükken bir saklama sınırı belirleyin. Dolu bir disk, yalnızca analiz aracını değil, VPS üzerindeki her servisi devre dışı bırakır; bu da veritabanı birimini df -h aracının sizi uyaracağı bir yerde tutmak için en güçlü argümandır. Bu risk, halihazırda hacimli veriler barındıran bir sunucuda daha fazla dikkat gerektirir çünkü kendi kendine barındırılan bir fotoğraf sunucusu, herhangi bir analiz veritabanı yaklaşmadan çok önce diski tamamen dolduracaktır.
Reverse proxy arkasında nasıl davranır
Toplayıcıyı, ölçüm yaptığı sitenin bir alt alan adına, örneğin stats.example.com adresine yerleştirin. Bu, toplayıcı isteğini birinci taraf (first party) haline getirir; böylece tarayıcının üçüncü taraf isteklerini engelleyen kurallarına takılmaz.
Container portunu yayınlarken uygulamayı loopback adresine bağlayın. Docker, kendi firewall kurallarını ufw kurallarından önce uygular. Bu nedenle -p 3000:3000 olarak yayınlanan bir container, ufw status portun reddedildiğini gösterse bile internetten erişilebilir. Başka bir makineden curl http://SERVER_IP:3000 ile test edildiğinde dashboard görüntülenir. -p 127.0.0.1:3000:3000 olarak yayınlandığında aynı test Connection refused sonucunu verir ve bu porta yalnızca proxy erişebilir. Bu alışkanlık yalnızca bir dashboard'u gizlemekle kalmaz: aynı makinede bir onion service çalıştırmanın temelini oluşturur. Public interface üzerinde yanıt vermeye devam eden herhangi bir servis, gizli adresi IP adresinize bağlayan unsurdur. Collector endpoint açık internetten erişilebilir kalmalıdır, ancak dashboard'un erişilebilir olması gerekmez. İkinci bir subdomain yayınlamak yerine bunu özel bir ağ üzerinden okumayı tercih ediyorsanız, subnet router ile VPS ağını tailnet'inize duyurmak, port açmadan erişim sağlar.
server {
listen 443 ssl;
server_name stats.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}İletme başlıkları (forwarding headers) burada isteğe bağlı değildir. X-Forwarded-For olmadan her ziyaret 127.0.0.1 üzerinden geliyormuş gibi görünür; bu yüzden ülke raporu boş kalır ve tekil ziyaretçi sayısı bire düşer. Her proje hangi başlığa ve hangi ayar altında güvendiğine kendisi karar verir; bu yüzden varsayımda bulunmak yerine proxy dokümantasyonunu bir kez kontrol edin. Caddy bu başlıkları kendisi ayarlar ve aynı iş için bir Caddyfile yalnızca iki satırdır.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}Henüz bir proxy seçmediyseniz, nginx, Caddy ve Traefik karşılaştırması birkaç alt alan adına sahip tek bir sunucu için hangisinin uygun olduğunu açıklar.
Self-host yaparken çerez banner'ına hâlâ ihtiyaç var mı?
Self-host yapmak, verinin kimin elinde olduğunu değiştirir. Ancak verilerle ilgili yasal düzenlemeleri değiştirmez. İki kuralı birbirinden ayırmak gerekir. ePrivacy onay kuralı, ziyaretçinin cihazına herhangi bir şey kaydetmek veya oradan bir şey okumakla ilgilidir; bu nedenle çerez oluşturmayan ve yerel depolamaya (local storage) hiçbir şey yazmayan bir araç, bu özel gereksinimin dışında kalır. GDPR ise kişisel verilerin işlenmesiyle ilgilidir ve IP adresi kişisel veri sayılır; dolayısıyla hâlâ yasal bir dayanağa, saklama süresi sınırına ve biri elinizde ne tür veriler olduğunu sorduğunda verecek bir cevaba ihtiyacınız vardır.
Plausible, Umami, GoatCounter ve Medama varsayılan olarak çerez oluşturmaz. Her birinin bunun yerine ne elde ettiği projeye göre farklılık gösterir ve sürümler arasında değişebilir; bu yüzden özetler yerine projenin kendi gizlilik belgelerini okuyun. Matomo, yönetici arayüzünden etkinleştirebileceğiniz IP anonimleştirme ve bir devre dışı bırakma (opt-out) uç noktası ile birlikte gelir.
Düzenleyici kurumlar farklı ülkelerde farklı sonuçlara varmaktadır. Örneğin Fransa'nın CNIL kurumu, kitle ölçümünün hangi koşullar altında onaydan muaf tutulabileceğine dair şartlar yayınlamaktadır. Bu bölüm olgusal bir özet niteliğindedir ve hukuki tavsiye içermez. Gerçek kullanıcılara sahip gerçek bir site için kendi yargı bölgenizdeki bir avukata danışın.
İnsanların gözden kaçırdığı bir nokta şudur: erişim logları da kişisel veridir. GoAccess sayfaya herhangi bir betik eklemez ancak yine de IP adreslerini işler; bu nedenle log tabanlı analizler otomatik olarak kuralların dışında kalmaz. Bir servisi kendi sunucunuza taşımak, riski ortadan kaldırmak yerine sadece yerini değiştirir; kendi kendine barındırılan bir SearXNG örneğinin aslında neyi gizlediği konusunun arama motorlarında durmasının ve sorguların yine de kendi loglarınıza düşmesinin nedeni de budur.
Reklam engelleyiciler ve istatistiklerinizin neden düşeceği
Filtre listeleri, ana bilgisayar adı (hostname) ve URL deseni üzerinden eşleşme yapar. Barındırılan bir analitik ürününü eşleştirmek kolaydır, çünkü herkes bu ürünü aynı bilinen ana bilgisayar adından yükler. Toplayıcıyı kendi alt alan adınıza taşımak, bu ana bilgisayar adını istekten kaldırır; betiği seçtiğiniz bir yoldan sunmak ise bilinen dosya adını ortadan kaldırır. Her iki yöntem de bir listenin eşleşmesi gereken veriyi değiştirir.
Bu yazı, bir isabet oranı iddia etmemektedir çünkü herhangi bir ölçüm yapılmamıştır. Belirli bir kurulumu engelleyen ziyaretçi payı kitlenize bağlıdır; yazılımcı kitlesi, genel kitleye kıyasla çok daha fazla engelleme yapar. Bunun yerine kendi farkınızı ölçün. Aynı hafta içinde, erişim günlüğündeki HTML sayfası isteklerini GoAccess ile sayın ve bunu betik tabanlı aracınızın raporladığı sayfa görüntüleme sayılarıyla karşılaştırın. Aradaki fark, engellenen ziyaretler ile sitenizde önbellekten sunulan sayfaların toplamıdır.
Barındırılan bir üründen geçiş yaptığınız gün toplamların değişmesini bekleyin ve bu değişimin bir kısmının engelleme ile ilgisi olmayacağını göz önünde bulundurun. Ürünler, bir sayfa görüntülemenin ne olduğu, tek sayfalık bir uygulama içindeki rota değişiminin sayılıp sayılmayacağı ve bir oturumun ne zaman sona ereceği konusunda farklı görüşlere sahiptir. Trafiğin düştüğü sonucuna varmadan önce haftalık trendleri karşılaştırın.
Hangi site için hangisi
- Aylık yaklaşık 50.000 sayfa görüntülenmesinin altında kalan kişisel bir site veya blog: 1 GB RAM'li bir VPS üzerinde, dosya kopyalama yöntemiyle yedeklenen GoatCounter veya Medama.
- Komut dosyası ekleyemediğiniz veya ziyaretçilerin yoğun engelleme yaptığı bir site: Mevcut log dosyaları üzerinden zamanlanmış şekilde çalışan GoAccess.
- Paneli başkasının incelediği küçük bir işletme sitesi: Postgres container'ı ile birlikte Umami.
- Hedefler ve dönüşüm hunileri istediğiniz, 2 GB veya daha fazla RAM'e sahip bir sunucu: Plausible Community Edition veya daha yeni bir panel istiyorsanız ve daha genç bir proje olmasını kabul ediyorsanız Rybbit.
- Çok sayıda site, çok sayıda kullanıcı hesabı veya ham verileri kendi saklama politikanıza göre tutma zorunluluğu: Yukarıda yayınlanan kılavuzdaki boyutlandırma önerilerine göre Matomo.
İhtiyacınızı karşılayan en küçük araçla başlayın. Daha sonra GoatCounter'dan Plausible'a geçmek size bir alt alan adına ve geçmiş verilerin bir kısmına mal olur. Matomo'dan başka bir araca geçmek ise keyif almayacağınız bir veri taşıma süreci gerektirir. Aynı sunucuda başka nelerin barınabileceğine henüz karar vermediyseniz, genel self-hosting rehberi yanına nelerin eklenebileceğini açıklar; eğer istediğiniz ziyaretçi sayılarından ziyade uygulama düzeyinde istek takibi ise, bu iş için self-hosted gözlemlenebilirlik servisi kullanmanız gerekir.
FAQ
Kendi kendine barındırılan (self-hosted) analitik araçları çerez banner'ı ihtiyacını ortadan kaldırır mı?
Hayır, bu iki konu birbirinden ayrıdır. ePrivacy kapsamındaki onay kuralı, ziyaretçinin cihazına bir şey kaydetmeyi veya oradan bir şey okumayı kapsar; bu nedenle çerez oluşturmayan ve yerel depolamaya (local storage) hiçbir veri yazmayan bir araç bu gerekliliğin dışında kalır. GDPR ise farklı bir kuraldır ve kişisel verilerin işlenmesini kapsar. IP adresi kişisel veri sayıldığı için, çerez olmasa dahi yasal bir dayanağa ve veri saklama sınırına sahip olmanız gerekir. Kendi kendine barındırma, veriyi kendi sunucunuza taşır ve sizi bu veriden sorumlu taraf haline getirir. Kendi düzenleyici kurumunuzun rehberini inceleyin ve özel durumunuz için bir hukuk uzmanına danışın.
Kendi kendine barındırılan analitik araçları bir VPS üzerinde ne kadar RAM gerektirir?
Bunu belirleyen dashboard değil, veri deposudur. GoatCounter ve Medama tek bir dosya üzerinde tek bir süreç (process) olarak çalışır; Medama belgeleri, küçük sitelerin 256 MB RAM'e sahip makinelerde çalışabileceğini belirtir. Umami, Node uygulamasına ek olarak bir Postgres container'ı gerektirir. Plausible Community Edition ve Rybbit ise ClickHouse kullanır ve her iki proje de en az 2 GB RAM önermektedir. Matomo'nun kendi rehberi, aylık 100.000 sayfa görüntülemesine kadar 2 CPU çekirdeği ve 2 GB RAM ile başlamayı önerir.
Kendi kendine barındırdığım veriler neden değiştirdiğim analitik aracından daha düşük çıkıyor?
Bunun iki gerçek nedeni vardır. Filtre listeleri bazı toplayıcı isteklerini engeller, bu nedenle script tabanlı tüm araçlar bu ziyaretleri kaybeder. Ayrıca ürünler farklı sayım yöntemleri kullanır; bir sayfa görüntülemesinin ne olduğu ve oturumun ne zaman sona erdiği araçtan araca değişir. Erişim loglarınızdaki bir haftalık HTML sayfa isteklerini, script tabanlı sayfa görüntülemeleriyle karşılaştırın. Aradaki fark, engellenen ziyaretler ve önbelleğe alınan sayfalardır; bu ölçümü başkasının yayınladığı oranlardan değil, doğrudan kendi siteniz üzerinden yapın.
Plausible veya Rybbit'i bir ARM VPS üzerinde çalıştırabilir miyim?
Her ikisi de ClickHouse kullanır ve ClickHouse, x86 üzerinde SSE 4.2, ARM üzerinde ise NEON desteği gerektirir. Plausible'ın gereksinimleri tam olarak bunu belirtir, Rybbit belgeleri ise ARM sistemlerin ARMv8.2-A veya daha yeni bir mimariye sahip olması gerektiğini söyler. Güncel ARM sunucu çekirdekleri bu standardı karşılar, ancak eski olanlar karşılamaz. Bu durum, uygulama günlüğünde bir hata yerine ClickHouse'un komut seti hatası vererek başlamayı reddetmesi şeklinde ortaya çıkar. Küçük bir ARM cihazında, tek dosya tabanlı araçlar bu sorunu tamamen ortadan kaldırır çünkü hiçbiri ClickHouse kullanmaz.
Takip script'i kullanmak yerine sunucu loglarını mı ayrıştırmalıyım?
Script ekleyemediğiniz, hedef kitlenizin yoğun engelleme yaptığı veya botları da içeren bir sayım istediğiniz durumlarda log ayrıştırmayı tercih edin. GoAccess, sunucunuzun zaten yazmakta olduğu logları okur; bu nedenle sayfa yüküne veya veritabanına ek yük getirmez. Ancak tarayıcı içinde gerçekleşen hiçbir veriyi göremezsiniz; ayrıca CDN veya tarayıcı önbelleğinden sunulan sayfaları da kaçırırsınız çünkü bu istekler sunucunuza ulaşmaz. Birçok site her iki yöntemi de kullanır ve bunları iki farklı ölçüm türü olarak değerlendirir.