RE:NODE

ექსპლუატაცია11 წუთის საკითხავი

თამაშის სერვერის ლოგები: სად არის და რა მოძებნო

სად წერენ ლოგებს Minecraft, Source, Unity, Unreal, DayZ, Zomboid და სხვა თამაშის სერვერები, რომელი ფაილებია მნიშვნელოვანი და რა ზუსტი სტრიქონები ღირს მოსაძებნად.

0 მკითხველი

ყველა თამაშის სერვერი ორი სახის ჩანაწერს წერს: კონსოლის გამოტანას, რომელსაც პანელში მორბენალს ხედავ, და ერთ ან მეტ ლოგ ფაილს დისკზე, რომლებიც restart-ს გადაურჩება. როცა რაღაც არასწორად მიდის, ფაილი გჭირდება, რადგან კონსოლი მხოლოდ იმას ინახავს, რაც ბოლო ჩართვის შემდეგ მოხდა. სად არის ფაილი, ძირითადად იმ ძრავზეა დამოკიდებული, რომელზეც თამაშია აგებული - Minecraft და სხვა Java სერვერები წერს logs/latest.log-ს, Unreal Engine-ის თამაშები <Project>/Saved/Logs/-ს, Source-ის თამაშები საერთოდ არაფერს, სანამ ლოგირებას არ ჩართავ, ხოლო Unity-ის თამაშები იქ, სადაც -logFile მიუთითებს. როცა ფაილი იცი, ძებნა მოკლეა: პირველი ERROR ან Exception გაშვების ბანერის შემდეგ, პლუს რამდენიმე კონკრეტული სტრიქონი, რომელთაგან თითოეული ერთ რამეს ნიშნავს.

ეს პოსტი რუკაა: სად ინახავს ლოგებს თითოეული გავრცელებული თამაში, რომელი ფაილებია მნიშვნელოვანი და რა უნდა მოძებნო. რამდენ ხანს შეინახო ისინი და როგორ მოახდინო როტაცია, ცალკე გადაწყვეტილებაა, განხილული სტატიაში ლოგები, რომელთა შენახვაც ღირს, ხოლო stack trace-ის წაკითხვის ხელოვნება, როცა მას იპოვი, მოცემულია სტატიაში როგორ წაიკითხო სერვერის კონსოლი.

კონსოლი და ლოგ ფაილი ერთი და იგივე არ არის#

Pterodactyl-ის მსგავს პანელზე კონსოლი, რომელსაც ბრაუზერში ხედავ, თამაშის პროცესის სტანდარტული გამოტანაა, ცოცხლად გადმოცემული. ეს არის ყველაზე სწრაფი ხედი იმისა, რაც ახლა ხდება, და მას ორი შეზღუდვა აქვს:

  • ის ყოველ ჩართვაზე თავიდან იწყება. ავარიისა და restart-ის შემდეგ ავარიის გამოტანა ცოცხალი ხედიდან ქრება და მას ახალი ჩართვა ცვლის.
  • შეიძლება ყველაფერი არ იყოს. ბევრი თამაში ზოგ ხაზს მხოლოდ ფაილში წერს - დეტალურ შეცდომებს, ჩატს, ადმინის მოქმედებებს - კონსოლში კი შეჯამებას ბეჭდავს, ან არაფერს.

დისკზე არსებული ლოგ ფაილი მდგრადი ჩანაწერია. თამაშების უმეტესობა ყოველ ჩართვაზე ახალს იწყებს და წინას სხვა სახელით ინახავს, ამიტომ ფაილი, რომელიც ავარიის შემდეგ გჭირდება, ჩვეულებრივ მიმდინარე კი არა, მის წინა ფაილია. მხოლოდ ეს დეტალი ხსნის "ლოგში არაფერი წერია" ტიპის შეტყობინებების დიდ ნაწილს: ადამიანმა ჯანმრთელი restart-ის ლოგი გახსნა და არა ავარიის.

RE:NODE-ზე კონსოლი აჩვენებს ფილტრის გარეშე ცოცხალ გამოტანას ბრძანების ხაზითა და ისტორიით, ხოლო ყველა ლოგ ფაილი ხელმისაწვდომია ფაილების მენეჯერით ან SFTP-ით. თუ დიდ ფაილში ძებნა გჭირდება, მისი ჩამოტვირთვა და ლოკალურად ძებნა ხშირად უფრო სწრაფია, ვიდრე ბრაუზერში სქროლვა.

სად არის ლოგები, ძრავის მიხედვით#

თამაშების უმეტესობა ლოგირებას იმ ძრავისგან იღებს მემკვიდრეობით, რომელზეც აგებულია, ამიტომ ძრავის ცოდნის შემდეგ მდებარეობა პროგნოზირებადია.

Java: Minecraft და მისი proxy-ები

ფაილირა არის
logs/latest.logმიმდინარე გაშვება. ყოველ ჩართვაზე თავიდან იწყება
logs/YYYY-MM-DD-N.log.gzწინა გაშვებები, შეკუმშული, თითო ჩართვაზე ან დღეზე
crash-reports/crash-<date>-server.txtიწერება, როცა თამაში ფატალურ შეცდომას დაიჭერს
hs_err_pid<pid>.logიწერება root-ში, როცა თავად JVM ჩავარდება

Paper, Purpur, Velocity, BungeeCord, Forge, NeoForge და Fabric ყველა ამ განლაგებას მიჰყვება. plugin-ები ხშირად საკუთარ ლოგებს plugins/<Name>/-ში ინახავს, CoreProtect კი ბლოკების ისტორიას ლოგში კი არა, მონაცემთა ბაზაში ინახავს. ავარიის ანგარიში Minecraft-ში ყველაზე სასარგებლო ფაილია - ის ასახელებს thread-ს, exception-ს და ჩვეულებრივ mod-ს ან plugin-ს.

Source ძრავი: CS2, TF2, Garry's Mod, CS 1.6

Source სერვერები ნაგულისხმევად დისკზე ძალიან ცოტას ინახავს. ამას ორი გადამრთველი ცვლის:

  • log on server.cfg-ში (ან კონსოლში) წერს მოვლენების ლოგებს - შეერთებები, ჩატი, მკვლელობები, რაუნდები - თამაშის საქაღალდის logs/ დირექტორიაში, თითო ფაილი რუკის ყოველ ცვლილებაზე, სახელით L<MMDD><NNN>.log.
  • -condebug გაშვების ხაზზე მთელ კონსოლის გამოტანას აკოპირებს console.log-ში თამაშის საქაღალდეში. სასარგებლოა ავარიის დევნისას, მუდმივ პარამეტრად კი ხმაურიანია.

SourceMod საკუთარ ლოგებს ამატებს addons/sourcemod/logs/-ში: errors_<date>.log plugin-ების შეცდომებისთვის, რომელიც პირველი გასახსნელი ფაილია ცუდად მომუშავე mod-ებიან სერვერზე, და L<date>.log ადმინის მოქმედებებისთვის. AMX Mod X CS 1.6-ზე იგივეს აკეთებს addons/amxmodx/logs/-ში. Metamod და CounterStrikeSharp CS2-ზე ლოგს კონსოლსა და addons/-ის ქვეშ საკუთარ საქაღალდეებში წერს.

Unreal Engine: Palworld, Satisfactory, The Isle, Abiotic Factor

Unreal სერვერები წერს <Project>/Saved/Logs/<Project>.log-ში და ჩართვისას წინა გაშვებას <Project>-backup-<timestamp>.log-ად გადაარქმევს. ასე რომ Palworld-ისა Pal/Saved/Logs/-შია, Satisfactory-ისა - FactoryGame/Saved/Logs/FactoryGame.log. ფატალური ავარიები ასევე ტოვებს საქაღალდეს <Project>/Saved/Crashes/-ში minidump-ით და ლოგის ასლით. Unreal-ის ლოგის ხაზები კატეგორიით არის მონიშნული, როგორიცაა LogNet, LogWorld ან LogOnline, და ეს ძებნის შევიწროების საუკეთესო გზაა.

Unity: Valheim, Rust, 7 Days to Die, Unturned, SCP: Secret Laboratory

Unity სერვერები წერს იქ, სადაც -logFile არგუმენტი მიუთითებს, ან სტანდარტულ გამოტანაში, როცა ის არ არის ან --ზეა დაყენებული (ქცევა, რომელიც Unity-ის ვერსიებს შორის იცვლებოდა). არცერთის გარეშე Linux-ზე ნაგულისხმევია ~/.config/unity3d/<Company>/<Product>/Player.log. პრაქტიკაში:

  • Valheim ნაგულისხმევად კონსოლში ბეჭდავს; ფაილის შესანახად დაამატე -logFile.
  • Rust ჩვეულებრივ ეშვება -logfile-ით, რომელიც ფაილს ასახელებს, ხოლო Oxide ან Carbon ამატებს oxide/logs/-ს ან carbon/logs/-ს plugin-ების შეცდომებით.
  • 7 Days to Die-ის სტანდარტული გაშვების სკრიპტი -logfile-ს თარიღიანი სახელით გადასცემს, ამიტომ ყოველ გაშვებას საკუთარი output_log ფაილი აქვს სერვერის მონაცემების საქაღალდეში. ისინი გროვდება - ნახე დისკის ადგილი.

Unity-ის ლოგები ვრცელია და headless სერვერზე ხშირად სავსეა უვნებელი shader-ისა და asset-ის გაფრთხილებებით. სასარგებლო ხაზები შეიცავს Exception-ს, ხოლო exception-ის ყველაზე სასარგებლო ნაწილი stack trace-ის პირველი ხაზია, რომელიც UnityEngine-ის გარდა სხვა რამეს ასახელებს.

Bohemia: DayZ და Arma 3

DayZ და Arma 3 წერს profiles საქაღალდეში, რომელიც -profiles=-ით არის მითითებული. მნიშვნელოვანი ფაილები:

ფაილიშიგთავსი
*.RPTძრავისა და სკრიპტების გამოტანა, შეცდომები, mod-ების ჩატვირთვა - მთავარი ლოგი
*.ADMადმინის ლოგი: შეერთებები, მკვლელობები, დარტყმები, ჩატი, თუ -adminlog დაყენებულია
script_<date>.logსკრიპტის შეცდომები (DayZ)
crash_<date>.logიწერება, როცა სერვერი ავარიულად ითიშება

ახალი .RPT ყოველ გაშვებაზე იწყება და ისინი არ სუფთავდება, რაც profiles საქაღალდეს DayZ-ის დისკის გავსების გავრცელებულ მიზეზად აქცევს. -nologs RPT გამოტანას მთლიანად თიშავს; სასარგებლოა მხოლოდ მაშინ, როცა დარწმუნებული ხარ, რომ არასოდეს დაგჭირდება, რაც DayZ-ზე არასოდესაა. DayZ-ის ადმინის ხელსაწყოები და BattlEye RCON აღწერს, რა კითხულობს .ADM ფაილს.

თამაშები საკუთარი განლაგებით

თამაშისად უნდა ნახო
Project ZomboidZomboid/server-console.txt (მიმდინარე გაშვება), Zomboid/Logs/ (ჩატის, მომხმარებლის, ადმინის, debug ლოგები თარიღების მიხედვით)
Factoriofactorio-current.log და factorio-previous.log მონაცემების დირექტორიაში; --console-log ჩატისა და შესვლებისთვის
Terrariaნაგულისხმევად არაფერი; TShock წერს tshock/logs/-ს
Don't Starve Together<Cluster>/Master/server_log.txt, server_chat_log.txt და იგივე Caves/-ში
FiveMსერვერის კონსოლი; txAdmin ადმინისა და სერვერის ლოგებს ინახავს txData/<profile>/logs/-ის ქვეშ

Project Zomboid-ის Logs/ საქაღალდე განსაკუთრებით კარგია: ცალკე ფაილები ჩატისთვის, ადმინის ბრძანებებისთვის, მოთამაშეების შეერთებებისთვის, ნივთებისა და PvP მოვლენებისთვის, რაც მას აქ ჩამოთვლილ თამაშებს შორის დავების გადასაწყვეტად საუკეთესოდ აღჭურვილს ხდის.

რა მოძებნო პირველ რიგში#

40,000-ხაზიან ლოგს არ კითხულობ; მასში ეძებ. თანმიმდევრობა, რომელიც თითქმის ყოველთვის მუშაობს:

  1. გაშვების ბანერი. იპოვე სერვერის უახლესი ჩართვა - Minecraft-ში Starting minecraft server version, Unreal-ში პირველი LogInit ხაზები, Source-ში build-ის ნომერი. ყველაფერი მის ზემოთ წინა გაშვებაა.
  2. პირველი შეცდომა მის შემდეგ. მოძებნე ERROR, Exception, FATAL ან Error: და აიღე პირველი დამთხვევა ბანერის შემდეგ და არა ბოლო დამთხვევა ფაილში.
  3. ბოლო ხაზები დასასრულამდე. თუ ფაილი უეცრად მთავრდება გათიშვის შეტყობინების გარეშე, პროცესი გარედან მოკლეს - მეხსიერებამ, kill ღილაკმა ან ჰოსტმა - და ლოგი ამას ვერ ახსნის.

შემდეგ კონკრეტული სტრიქონები, რომლებიც ნებისმიერ ზოგად ძებნაზე მეტად ღირს, რადგან თითოეულს ერთი მნიშვნელობა აქვს:

სტრიქონირას ნიშნავს
Address already in use, Failed to bind, BindExceptionპორტი სხვა პროცესს უკავია
OutOfMemoryError, Could not reserve enough spaceJava heap ზედმეტად პატარაა, ან -Xmx კონტეინერზე დიდია
Can't keep up! Is the server overloaded?Minecraft-ის მთავარი thread ჩამორჩება; tick-ები გამოტოვებულია
Segmentation fault, SIGSEGVnative ავარია - ხშირად mod-ის, plugin-ის ან ძრავის ბაგი
Incompatible version, version mismatchკლიენტისა და სერვერის build-ები განსხვავდება
UnknownDependencyException, missing dependencymod-ს ან plugin-ს სხვა სჭირდება, რომელიც დაყენებული არ არის
Permission denied, AccessDeniedExceptionფაილი, რომლის წაკითხვა ან ჩაწერა სერვერს არ შეუძლია
No space left on deviceდისკი სავსეა
Invalid token, login failed, GSLTთამაშის სერვერის token ან ანგარიშის შესვლა უარყოფილია

თითოეულს ამ ბლოგზე სადღაც საკუთარი სექცია აქვს, მაგრამ მთავარი ის არის, რომ ლოგის მთლიანად გაგება იშვიათად გჭირდება - საჭიროა ერთი ხაზის ამოცნობა.

ლოგებში ძებნა shell-ით და მის გარეშე#

shell-ით - შენი მანქანა, VDS ან ლოგების ჩამოტვირთული ასლი - საქმეს grep აკეთებს:

bash
# first errors in the current Minecraft log, with line numbers$ grep -n -E "ERROR|Exception" logs/latest.log | head -20# the same across every compressed older log$ zgrep -l "OutOfMemoryError" logs/*.log.gz# five lines of context around each match$ grep -n -C 5 "Segmentation fault" console.log# follow a log as it is written$ tail -f Pal/Saved/Logs/Pal.log

zgrep .gz ფაილებს პირდაპირ კითხულობს, ამიტომ Minecraft-ის ერთი კვირის ლოგების გახსნა ძებნისთვის საჭირო არ არის. -l ბეჭდავს მხოლოდ დამთხვეული ფაილების სახელებს, რაც ყველაზე სწრაფი გზაა იმის გასარკვევად, რომელ დღეს დაიწყო რაღაც.

shell-ის გარეშე - რაც პანელზე ჩვეულებრივი შემთხვევაა - ვარიანტებია ფაილების მენეჯერი და SFTP. პატარა ლოგი გახსენი ფაილების მენეჯერის რედაქტორში და გამოიყენე ბრაუზერის ძებნა; ყველაფერი დიდი ან შეკუმშული ჩამოტვირთე SFTP-ით და შენს მანქანაზე მოძებნე. ნებისმიერ ღირსეულ ტექსტურ რედაქტორს შეუძლია 100 MB ფაილში ძებნა, და უმეტესობა .gz ფაილებს ხსნის, ან გახსნის, როცა გაშლი. SFTP და ფაილების მენეჯერი დაკავშირებას აღწერს.

ლოგები, რომლებიც ლოგები არ არის: ჩატის, ადმინისა და აუდიტის ჩანაწერები#

ზემოთ ჩამოთვლილი ფაილებიდან რამდენიმე უფრო ადამიანებზეა, ვიდრე შეცდომებზე. Source-ის log on გამოტანა, DayZ-ის .ADM, Zomboid-ის ჩატისა და ადმინის ლოგები, SourceMod-ის ადმინის ლოგი და Minecraft-ის ჩატის ხაზები latest.log-ში ჩანაწერია იმისა, ვინ რა გააკეთა. ისინი მნიშვნელოვანია, როცა მოთამაშე ამბობს, რომ უსამართლოდ დაბანეს, როცა ბაზა ნადგურდება და არავინ აღიარებს, ან როცა ადმინის ანგარიში ისეთმა ადამიანმა გამოიყენა, ვისაც არ უნდა გამოეყენებინა.

ორი პრაქტიკული მომენტი:

  • ჩართე ისინი მანამ, სანამ დაგჭირდება. -adminlog DayZ-ზე და log on Source-ის თამაშებზე გამორთულია, სანამ არ მოითხოვ, და გასული კვირის მკვლელობების ლოგს მოვლენის შემდეგ ვერ აღადგენ.
  • ისინი პერსონალურ მონაცემებს შეიცავს. IP მისამართები, Steam ID-ები და ჩატი GDPR-ის თვალსაზრისით პერსონალური მონაცემებია. შეინახე ისინი იმდენ ხანს, რამდენიც მოდერაციას სჭირდება, და არა სამუდამოდ, და შეზღუდე, შენი გუნდიდან ვის შეუძლია მათი წაკითხვა. RE:NODE-ზე subuser-ის უფლებები საშუალებას გაძლევს მოდერატორს კონსოლზე წვდომა მისცე ფაილებზე წვდომის გარეშე, ან ფაილებზე წვდომა billing-ის გარეშე.

ამ ლოგებზე აგებული სერვერის მასშტაბის მოდერაცია განხილულია სტატიაში სერვერის წესები, მოდერაცია და გუნდი.

ლოგირების გაძლიერება და უკან შესუსტება#

როცა პრობლემის დაზუსტება რთულია, მეტი ლოგირება ცოტა ხნით გეხმარება. ყველა ძრავს თავისი გზა აქვს:

  • Minecraft: plugin-ებს კონფიგში ხშირად აქვთ debug: true ოფცია; Paper-მა თავისი ძველი /timings სისტემა spark-ით ჩაანაცვლა, რომელსაც ბოლო build-ები თან აყოლებს - მაგრამ spark profiler-ია და არა ლოგი.
  • Source: -condebug და log on, როგორც ზემოთ; developer 1 კონსოლში მეტს ბეჭდავს.
  • Unreal: ლოგის დეტალურობა კატეგორიების მიხედვით, დაყენებული -LogCmds="LogNet Verbose"-ით ბრძანების ხაზზე ან DefaultEngine.ini-ში [Core.Log]-ის ქვეშ.
  • Factorio: --console-log multiplayer კონსოლის ფაილისთვის.
  • BepInEx: BepInEx/config/BepInEx.cfg ადგენს ლოგის დონეებს, რომლებიც LogOutput.log-სა და კონსოლში იწერება.

შემდეგ ისევ შეასუსტე. დეტალური ლოგირება დატვირთულ სერვერზე კვირაში გიგაბაიტებს წერს, დისკებს ავსებს და ანელებს სწორედ იმ სერვერს, რომლის დიაგნოსტიკაც უნდა გააკეთოს, რადგან დისკზე წერა უფასო არ არის თამაშის მთავარ thread-ზე, რომელიც სინქრონულად წერს ლოგს.

სადაც ლოგი არ დაგეხმარება#

ზოგი ჩავარდნა არცერთ ლოგში არ ტოვებს კვალს, რომელსაც თამაში წერს:

  • მეხსიერების ამოწურვით გაჩერება. kernel-ი პროცესს გარედან ასრულებს, ამიტომ თამაში ვერასოდეს ასწრებს ამის შესახებ ხაზის დაწერას. ლოგი უბრალოდ წყდება. მტკიცებულება პანელში მეხსიერების გრაფიკია; სერვერის დატვირთვის გრაფიკის წაკითხვა აჩვენებს, როგორ გამოიყურება მისი ფორმა.
  • kill პანელიდან ან ჰოსტის დონეზე გაჩერება. იგივე ხელწერა: ლოგი წინადადების შუაში მთავრდება.
  • ქსელის პრობლემები მოთამაშის მხარეს. სერვერის ლოგმა შეიძლება აჩვენოს timeout ან გათიშვის მიზეზი, მაგრამ არა ის, რატომ გაწყდა მათი კავშირი.
  • ლაგი. ნელი სერვერი იშვიათად წერს რამეს ლოგში, გარდა Minecraft-ზე Can't keep up-ისა. ლაგს profiler პოულობს და არა ლოგი - Minecraft-ისთვის ნახე spark profiler.

როცა ლოგი შეცდომის ან გათიშვის შეტყობინების გარეშე მთავრდება, შეწყვიტე მასში ძებნა და გრაფიკებს შეხედე.

FAQ#

სად არის ჩემი თამაშის სერვერის ლოგ ფაილი?

ძრავზეა დამოკიდებული. Java სერვერები იყენებს logs/latest.log-ს, Unreal სერვერები <Project>/Saved/Logs/-ს, Bohemia-ს თამაშები profiles საქაღალდეს, Unity-ის თამაშები კი იმას, რასაც -logFile ასახელებს. Source-ის თამაშები მხოლოდ იმას ინახავს, რასაც log on-ით ან -condebug-ით ჩართავ. ზემოთ მოცემული ცხრილები გავრცელებულ თამაშებს ჩამოთვლის.

რატომ არის ლოგი ცარიელი ჩემი სერვერის ავარიის შემდეგ?

სავარაუდოდ კითხულობ restart-ის ლოგს, რომელიც ავარიას მოჰყვა. მოძებნე წინა ფაილი: .gz Minecraft-ის logs/-ში, -backup- ფაილი Unreal-ში, უფრო ძველი თარიღიანი ფაილი Bohemia-სა და 7 Days to Die-ში. თუ ისიც შეცდომის გარეშე მთავრდება, პროცესი გარედან მოკლეს.

უსაფრთხოა ძველი ლოგ ფაილების წაშლა?

კი, გაჩერებული სერვერით ან ფაილებისთვის, რომლებშიც სერვერი ამჟამად არ წერს. ლოგები თამაშის მუშაობისთვის არასოდეს არის საჭირო. დიაგნოსტიკისთვის შეინახე ბოლო ერთი-ორი კვირა, ადმინისა და ჩატის ლოგები კი უფრო დიდხანს, თუ მოდერაციისთვის მათ ეყრდნობი.

შემიძლია ლოგები პანელიდან ვნახო ჩამოტვირთვის გარეშე?

კი, ფაილების მენეჯერი ტექსტურ ფაილებს ბრაუზერში ხსნის, კონსოლი კი ცოცხალ გამოტანას აჩვენებს. დიდი ან შეკუმშული ფაილებისთვის ჩამოტვირთვა და ლოკალურად ძებნა უფრო სწრაფია.

რატომ ახსენებს ჩემი ლოგი პაროლებს?

ზოგი თამაში ბეჭდავს გაშვების სრულ ხაზს, არგუმენტებად გადაცემული პაროლების ჩათვლით, ზოგი plugin კი თავისი მონაცემთა ბაზის კავშირის სტრიქონს წერს ლოგში. ლოგ ფაილებს მგრძნობიარედ მოეპყარი, გაზიარებამდე საიდუმლოებები წაშალე და შეცვალე ნებისმიერი პაროლი, რომელიც საჯაროდ გამოქვეყნებულ ლოგში გამოჩნდა.


კომენტარები

სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.

0/2000