İçeriğe geç

Metin2 log Veritabanı: Hangi Kayıtlar Tutulur, Nasıl Okunur?

Hazırlayan: Metin2VIP Editörleri Yayın: 6 dk okuma

Kısaca: log veritabanı, oyun çekirdeklerinin oyunda olanları yazdığı kayıt defteridir: eşya alma, düşürme, ticaret, pazar, artı basma, girişler, GM komutları, bağırmalar ve hile şüpheleri. Her oyun çekirdeği CONFIG'teki LOG_SQL bağlantısıyla kendisi yazar; ne kadarının yazılacağını DB_LOG_LEVEL belirler ve 1'de hile şüphesi tabloları boş kalır. Eşyanın kimliği log tablosunda izlenerek kimden kime geçtiği bulunur; IP ve sohbet içerdiği için bu kayıtlar kişisel veridir ve sınırlı süre saklanmalıdır.
İçindekiler
  1. DB_LOG_LEVEL: kaç kayıt tutulur?
  2. Hangi olay hangi tabloya yazılır?
  3. log tablosu: eşya ve karakter olayları
  4. Şikâyet ve hile incelerken nasıl kullanılır?
  5. Kişisel veri, saklama süresi ve gizli bilgiler

log veritabanı, oyun çekirdeklerinin oyunda olanları yazdığı kayıt defteridir: eşya alma, düşürme, ticaret, pazar, artı basma, girişler, GM komutları, bağırmalar ve hile şüpheleri burada tutulur. db çekirdeği bu veritabanına dokunmaz; her oyun çekirdeği CONFIG'teki LOG_SQL bağlantısıyla kendisi ve oyunu bekletmeden, sıraya alarak yazar. Ne kadarının yazılacağını DB_LOG_LEVEL ayarı belirler.

Tablolar ve hangi olayın nereye yazıldığı Metin2'nin sunucu kodundan gelir; DB_LOG_LEVEL ise sunucu ayarıdır ve sunucudan sunucuya değişebilir. Beş veritabanının genel tanıtımı Metin2 veritabanları yazısında.

DB_LOG_LEVEL: kaç kayıt tutulur?

DB_LOG_LEVEL Yazılanlar
0 Hiçbir şey
1 Eşya ve karakter olayları, girişler, GM komutları, seviye, artı basma, külçe, bağırma, ad değiştirme, açılış
2 1'e ek olarak hile şüpheleri (hack_log, speed_hack), cube tarifleri ve ayrıntılı oturum kaydı (loginlog2)
3 Hepsi; ek olarak saatlik Yang toplamları, balıkçılık, görev ödülleri ve Yang toplama satırları

Satır hiç yazılmamışsa değer 3'tür. Yaygın paketlerin ortak ayar dosyası GENERAL_CONFIG'de DB_LOG_LEVEL: 1 yazılıdır; bu yüzden böyle bir sunucuda hile şüphesi tabloları boş kalır. Hile incelemesi yapılacaksa GENERAL_CONFIG'teki değer en az 2'ye çekilmelidir; bu dosya çekirdeklerin kendi CONFIG'inden sonra okunduğu için oradaki satır geçerli olur. Seviye denetimi topluluk derlemelerine sonradan eklenmiştir; orijinal kod her kaydı yazar. CONFIG satırlarının listesi CONFIG ayarları yazısında.

Hangi olay hangi tabloya yazılır?

Tablo Ne yazılır Seviye
log Eşya ve karakter olayları (aşağıda) 1
loginlog Her oyuna giriş ve çıkış: kanal, hesap, karakter, seviye, sınıf, oyun süresi 1
command_log GM komutları: LOW_WIZARD ve üstü seviyedeki her komut, IP'siyle 1
levellog Her seviye atlama: ad, seviye, hesap, karakter, oyun süresi 1
refinelog Her artı basma denemesi: eşya, basamak, sonuç, yöntem (demirci, lonca, kâğıt) 1
goldlog Yalnız Gümüş Bar ve Altın Külçe hareketleri 1
shout_log Bütün oyuncuların bağırmaları 1
chat_log Yalnız GM'lerin normal, fısıltı, grup ve lonca konuşmaları 1
change_name Görevle yapılan ad değişiklikleri 1
bootlog Her oyun çekirdeğinin açılışı 1
acce Kuşak emiş işlemleri (kuşak sistemi kuruluysa) 1
loginlog2 Ayrıntılı oturum: GM mi, IP, istemci sürümü, giriş ve çıkış saati 2
hack_log Hile şüpheleri: Combo, Teleport, SYNC_POSITION_HACK, VERSION_CONFLICT gibi 2
speed_hack Hız hilesi şüphesi ve sayısı 2
cube Cube ile yapılan üretimler ve sonuçları 2
money_log Yang akışının türe göre saatlik toplamı (canavar, market, artı basma, görev, lonca) 3
fish_log, quest_reward_log, dragon_slay_log Balıkçılık, görev ödülleri, ejderha baskını süreleri 3

goldlog'un adı yanıltıcıdır: Yang değil, Gümüş Bar ve Altın Külçe gibi Yang külçelerinin pazar, ticaret ve görevle el değiştirmesini yazar. Yang hareketleri log tablosundadır. pcbang_loginlog, hackshield_log, vcard_log, GameTimeLog, hack_crc_log ve invalid_server_log eski bölgesel sistemlerden kalmıştır ve özel sunucularda boş durur.

log tablosu: eşya ve karakter olayları

Sütun Anlamı
type ITEM ya da CHARACTER
time Olayın zamanı
who Karakter numarası (player.id)
x, y Olayın geçtiği dünya koordinatı
what ITEM satırında eşyanın benzersiz kimliği, CHARACTER satırında olaya göre bir değer
how Olayın adı
hint Ayrıntı: eşya adı, karşı taraf, fiyat, adet
ip Karakterin bağlandığı IP
vnum ITEM satırında eşyanın vnum'u

Sık görülen olaylar:

how Ne zaman yazılır Ayrıntı
LOGIN, LOGOUT Karakter oyuna girer ya da çıkar LOGIN ipucunda IP, Yang, kanal, harita ve derece
GM_LOGIN GM yetkili karakter girer what GM seviyesi
DROP, GET Eşya yere atılır ya da yerden alınır Ad, adet, vnum
EXCHANGE_GIVE, EXCHANGE_TAKE Ticaret tamamlanır Eşya adı, karşı karakterin numarası, adet
EXCHANGE_GOLD_GIVE, EXCHANGE_GOLD_TAKE Ticarette 1.000 Yang'dan fazlası verilir what miktar, ipucunda karşı taraf
SHOP_BUY, SHOP_SELL Oyuncu pazarından alış ve satış Eşya, karşı taraf, fiyat, adet
BUY, SELL NPC marketinden alış, NPC'ye satış Eşya adı
SAFEBOX PUT, SAFEBOX GET, MALL GET Depoya koyma, depodan ve Nesne Marketi Deposu'ndan alma
REFINE SUCCESS, REFINE FAIL Artı basma Yeni eşyanın adı
DEAD_DROP Ölünce eşya düşer Envanterden mi ekipmandan mı
DEAD_BY_PC, DEAD_BY_NPC Karakter ölür what öldüren karakter ya da canavar numarası
BOSS_KILL, STONE_KILL Patron ya da patron rütbeli metin taşı kesilir what canavar numarası; kanal ve harita
GM GM /item ile eşya oluşturur Eşya adı
SYSTEM, SYSTEM_DROP Görev ya da kutu eşya verir; envanter doluysa yere Eşya adı
REAL_TIME_EXPIRE Süresi dolan eşya silinir
WARP, CHANGE_CH Işınlanma ve kanal değiştirme Işınlanmada hedef harita ve koordinat
DROP_GOLD, OVERFLOW_GOLD Yang yere atılır; Yang sınırına çarpılır what tutar

Ticaretin ve pazarın oyundaki işleyişi güvenli ticaret yazısında.

Şikâyet ve hile incelerken nasıl kullanılır?

Log tablolarında hiç indeks yoktur; büyümüş bir log tablosunda her sorgu bütün tabloyu tarar ve dakikalar sürebilir. Bakım saatinde, yönetici kullanıcıyla bir kez indeks eklemek incelemeyi hızlandırır. MyISAM tabloyu indeks eklenirken kilitlediği için bu işlem sunucu kapalıyken yapılmalıdır:

ALTER TABLE log.log ADD INDEX idx_who_time (who, time), ADD INDEX idx_what (what);

"Eşyam kayboldu." Önce oyuncunun o eşyayla ilgili satırlarına bakılır, sonra eşyanın kimliği (what) izlenir. Kimlik eşyaya yaratıldığı anda verilir ve ticarette, pazarda ya da yere düşüp alındığında aynı kalır, bu yüzden eşyanın yolu tek sorguyla görülür. Yalnız artı basmada değişir: başarılı basmada yeni bir eşya yaratılır, eski kimliğin son satırı REMOVE (REFINE SUCCESS), yeni kimliğin ilk satırı aynı anda yazılan REFINE SUCCESS olur.

SELECT time, how, hint, ip, what FROM log.log
WHERE type = 'ITEM' AND who = 1234 AND vnum = 19
ORDER BY time DESC LIMIT 50;

SELECT time, who, how, hint FROM log.log
WHERE type = 'ITEM' AND what = 10456789 ORDER BY time;

"Dolandırıldım." İki karakter arasındaki ticaret EXCHANGE_GIVE ve EXCHANGE_TAKE satırlarında, büyük Yang aktarımları EXCHANGE_GOLD_* satırlarında görünür; ipucundaki karakter numarası karşı tarafı verir.

"Eşyam artı basarken yandı." refinelog denemeyi, basamağı ve sonucu yazar; sonuç ve şanslar yükseltme sistemi yazısındaki kurallarla karşılaştırılır.

GM'in ne yaptığı. command_log her GM komutunu karakter numarası, ad, IP ve tam komut satırıyla tutar; GM'in oluşturduğu eşyalar ayrıca log tablosunda GM olarak durur. GM yetkilerinin dağıtımı GM yapma yazısında.

Hile şüphesi. hack_log ve speed_hack oyunun şüphelendiği anları yazar ve DB_LOG_LEVEL en az 2 iken dolar. Konum eşitleme kayıtları ağ gecikmesinden de doğabilir; bir kayıt tek başına ceza gerekçesi değildir. Aynı zaman aralığındaki eşya, Yang ve giriş kayıtlarıyla birlikte değerlendirildiğinde anlam kazanır.

Kişisel veri, saklama süresi ve gizli bilgiler

Log veritabanı kişisel veri doludur. log, loginlog2, command_log, hack_log ve chat_log IP adresi tutar; shout_log bütün oyuncuların bağırmalarını, chat_log GM'lerin oyuncularla yaptığı fısıltı dahil konuşmaları saklar; hack_log hesap adlarını yazar. Türkiye'de bu tür veriler KVKK kapsamındadır: ne kadar süre tutulacağını bir saklama kuralına bağlamak, sitenin gizlilik metninde belirtmek ve erişimi yöneticilerle sınırlamak gerekir. Hesap verisinin güvenliği account tablosu yazısında.

Eski kayıtlar parça parça silinir; tek seferde milyonlarca satır silmek tabloyu uzun süre kilitler. Log tablolarında anahtar olmadığından güvenli güncelleme modu açıkken MySQL LIMIT'siz bir DELETE'e zaten izin vermez. Sorgu, etkilenen satır sayısı 0 olana kadar tekrarlanır:

DELETE FROM log.log WHERE time < DATE_SUB(NOW(), INTERVAL 90 DAY) LIMIT 100000;

Silinen satırların yeri MyISAM'da yeni kayıtlarla dolar; disk alanını hemen geri almak için bakım saatinde OPTIMIZE TABLE log.log; çalıştırılır. Tabloların kendisi düşürülmemelidir, yoksa oyun çekirdekleri o tabloya yazarken hata verir.

Gizli bilgi yalnız MySQL'de değildir. Oyun ve auth çekirdekleri, hata veren ya da yarım saniyeden uzun süren her sorguyu tam metniyle syserr ve syslog dosyalarına yazar. Auth'un giriş sorgusu hesap adını ve yazılan parolanın özetini içerdiği için bu dosyalarda parolaların özeti bulunabilir. MySQL'in kendi genel sorgu günlüğü açıksa aynı sorgular orada da birikir. Bu yüzden syserr ve syslog dosyaları forumda ya da destek isterken paylaşılmamalı, eski günlükler düzenli silinmeli ve dosyalar yalnız sunucuyu çalıştıran kullanıcı tarafından okunabilmelidir. Hata iletilerinin anlamı syserr mesajları yazısında.

Yaygın paketlerin yedek betiği log veritabanının yalnız yapısını alır, kayıtlarını almaz. Şikâyet incelemesinde gerekecek kayıtlar saklanacaksa ayrıca yedeklenmeli ve aynı saklama süresine bağlanmalıdır; yedek düzeni server yedekleme yazısında.

Sık sorulan sorular

Metin2 log veritabanı neden boş ya da eksik?
CONFIG'de DB_LOG_LEVEL 0 ise hiçbir şey yazılmaz. Yaygın paketlerin ortak ayar dosyasında 1 yazılıdır; bu seviyede eşya, giriş, GM komutu ve artı basma kayıtları tutulur, ama hack_log, speed_hack, cube ve loginlog2 boş kalır. LOG_SQL satırı yanlışsa oyun çekirdeği log veritabanına hiç bağlanamaz.
log veritabanı çok büyüdü, kayıtları silebilir miyim?
Evet. Oyun bu tabloları neredeyse yalnız yazar; eski satırları silmek oyunu etkilemez. Tabloyu düşürmek (DROP) ise yeni kayıtların hata vermesine yol açar. Silme parça parça, LIMIT ile ve sunucunun sakin saatlerinde yapılmalıdır.
Bir eşyanın kimden kime geçtiğini nasıl bulurum?
log tablosunda type 'ITEM' satırlarının what sütunu eşyanın benzersiz kimliğidir. Eşyanın kimliği item tablosundan ya da sahibinin bir kaydından bulunur, sonra o kimliğin bütün satırları zamana göre sıralanır; ticarette EXCHANGE_GIVE ve EXCHANGE_TAKE, pazarda SHOP_SELL ve SHOP_BUY satırları eşyanın el değiştirdiği anlardır.
hack_log'da bir oyuncunun kaydı var, hile yapıyor demek mi?
Tek başına hayır. hack_log ve speed_hack oyunun şüphelendiği anları yazar; konum eşitleme gibi kayıtlar ağ gecikmesinden de doğabilir. Aynı zaman aralığındaki eşya, Yang ve giriş kayıtlarıyla birlikte değerlendirilmelidir.

İlgili sayfalar

Kategori: Server Kurma Server Kurulumu gm komutları mysql sunucu yönetimi log hile tespiti

Bu sayfadaki bilgiler Metin2'nin sunucu yazılımındaki hesaplamalara ve standart oyun dosyalarına dayanır. Oyun dosyalarını değiştiren sunucularda değerler farklı olabilir. İçerikleri nasıl hazırlıyoruz?

Bu sayfa işine yaradı mı?

Giriş yap, oy ver ya da sayfayı kaydet. Okumak için üyelik gerekmez. WhatsApp X'te paylaş
Yanlış ya da eksik bir bilgi mi gördün? Bildir
Neyin yanlış olduğunu, doğrusunun ne olduğunu ve bunu nereden bildiğini yaz. Mesajın editörlere gider; yazı, kontrol edildikten sonra düzeltilir.
Yalnız editör görür.

Tartışma

Kurallar

Henüz yorum yok. Bu konuda bir deneyimin ya da sorun varsa ilk yorumu sen yaz.

Giriş yap ya da kayıt ol, sonra yorum yaz. Metin2VIP üyeliği hiçbir oyun sunucusunun hesabı değildir.