ํ์ด์ฌ(Python)์ผ๋ก ์ค์๊ฐ(real-time) ๋ก๊ทธ(log) ํ์ผ ๋ชจ๋ํฐ๋ง(monitoring) ์ฝ๋ ๊ตฌํ
Python์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ๋ ๊ณ์ํด์ ๋ก๊ทธ๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๋ ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ฐํ๋ ๋ก๊ทธ๋ฅผ ๊ณ์ํด์ ๋ชจ๋ํฐ๋งํ๋ ์ฝ๋๋ฅผ ๊ตฌํํด์ผ ํ ๋๊ฐ ์๋ค.
์๋ฅผ๋ค์ด ๊ณ ์ฑ๋ฅ HPC์์ ์์ ์ ๋๋ฆฌ๊ณ ํด๋น PC์์ logํ์ผ์ ์ถ๋ ฅํ๊ณ ์๋๋ฐ, ํด๋ผ์ด์ธํธ ์ฅ๋น์ธ ๋ด ์ปดํจํฐ์์ ํด๋น logํ์ผ์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ๋๊ฒ ๋ค.
๋จผ์ ๋ก๊ทธํ์ผ์ ์ฐ๋ ์์์ฝ๋์ด๋ค.
logging.py
with open("log.txt", "w") as f:
for i in range(100):
text = "I love sark. %d\n" % i
print(text, end='')
f.write(text)
f.flush() # ์ถ๋ ฅ์ด ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐฐ ๋๊น์ง ์ถ๋ ฅํ์ง ์๊ธฐ์ flush๊ฐ ํ์
sleep(0.1)
์ด๋ ๊ฒ ํ๋ฉด 0.1์ด๋ง๋ค 'I love sark. {๋ฒํธ}'์ ๋ฌธ์ฅ์ 0๋ถํฐ 99๊น์ง ์ฐ๊ฒ ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ ์ flush()ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ๊ฐ๋์ฐจ๊ธฐ ์ ์ ํ์ผ์ ์ค์ ๋ก ์ถ๋ ฅ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋งค ์ค๋ง๋ค ๋ฐ๋ก๋ฐ๋ก ์จ์ฃผ๊ธฐ ์ํด์๋ flush()ํจ์๋ฅผ ํธ์ถํด์ค์ผ ํ๋ค.
๋ค์์ ํด๋น ๋ก๊ทธํ์ผ์ ๋ชจ๋ํฐ๋งํ๋ ์ฝ๋์ด๋ค.
monitoring.py
from time import sleep
delay_time = 0. # ์ง์ฐ ์๊ฐ ๊ธฐ๋ก
with open("log.txt","r") as f:
while True:
where = f.tell()
line = f.readline().strip()
if not line:
sleep(0.1)
delay_time += 0.1
f.seek(where)
if delay_time > 10.0: # 10์ด ์ด์ ์ง์ฐ๋๋ฉด ํ์ผ ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ
print("Delay has been exceeded.")
break
# print('๋๊ธฐ์ค')
else:
delay_time = 0. # reset delay time
print(line) # already has newline
์ค๋ช ์์ด๋ ์กฐ๊ธ ํท๊ฐ๋ฆด ์ ์์ผ๋ ํ์ด์ฌ ๋ด์ฅํจ์๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
file๊ฐ์ฒด์ tellํจ์
ํ์ผ์ ํ์ฌ ์์น๋ฅผ ๋ฆฌํด
file๊ฐ์ฒด์ seek(n)
ํ์ผ์ n๋ฒ์งธ ๋ฐ์ดํธ๋ก ์ด๋
๋ชจ๋ํฐ๋ง์๋ ์ง์ฐ์๊ฐ์ด ํ์ํ๋ฐ, ์ค์ ๋ก line์ด ๋ค ์ฐ์ด์ง ์์๋ค๊ณ ๊ฐ์ ํ์ ๋ if not line์กฐ๊ฑด๋ฌธ์ ๊ฑธ๋ฆฌ๊ฒ ๋๊ณ , ์ด ๋ 0.1์ด์ฉ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ง์ง๋ง์ผ๋ก ์ฝํ ์์น๋ก ์ด๋ํ๋ค๊ฐ ๋ค์ ์ฝ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ค. ๊ทธ๋ผ์๋ ๊ณ์ ํด์ ์๋ก์ด ๋ฌธ์ฅ์ด ๋ํ๋์ง ์์ผ๋ฉด ์ข ๋ฃ๊ฐ ๋์ด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ์ข ๋ฃ๋ฅผ ์ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ค. ํ๋ก๊ทธ๋จ์ ๋ฌธ์ ๊ฐ ์์ด์ ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ log๊ฐ ์ฐํ์ง ์๊ณ ์์ ์๋ ์๊ณ , ์ค๊ฐ์ ์ข ๋ฃ๋์ด ๋ ์ด์ log๊ฐ ์ฐํ์ง ์์ ์๋ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ถ๋ ฅ๋ ํ์ผ์ ํํ๋ง ๊ฐ์ง๊ณ ๋ ์ด๋ฅผ ์ ์๊ฐ ์๋ค. ๊ทธ๋์ ์ข ๋ฃ ์กฐ๊ฑด์ด ํ์ํ๊ณ , ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ง์ฐ ์๊ฐ ํ๊ณ๋ฅผ ๋๋ ๊ฒ์ด๋ค.
์ ์ฝ๋์์๋ ์ง์ฐ ์๊ฐ์ ํ๊ณ๋ฅผ 10์ด๋ก ์ค์ ํด๋์๋ค. 10์ด ์ด์ ์๋ก์ด line์ด ๋ค์ด์ค์ง ์์ผ๋ฉด loop๋ฌธ์ ๋น ์ ธ๋์ค๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃ๋๋ค.
๋ณ ๊ฒ ์๋ ๊ธฐ๋ฅ์ด์ง๋ง ์ง์ ๊ตฌํํ๋ ค๊ณ ํ๋ ์ ๋ฒ ํท๊ฐ๋ ธ๋ค. ๋๊ตฐ๊ฐ ๋น์ทํ ๊ณ ๋ฏผ์ ํ๋ ๋ถ์๊ฒ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ๋ง์น๋ค.
* ๊ด๊ณ ํด๋ฆญ์ ๋ธ๋ก๊ทธ ์ ์ง์ ํฐ ๋์์ด ๋ฉ๋๋ค. ํญ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋๊ธ