Python 리 눅 스 모니터링 방법
Linux 시스템 은 관리자 에 게 시스템 이 실 행 될 때 커 널 을 변경 할 수 있 도록 아주 좋 은 방법 을 제공 합 니 다. 커 널 시스템 을 다시 유도 하지 않 아 도 됩 니 다. 이것 은 / proc 가상 파일 시스템 을 통 해 이 루어 집 니 다. /proc 파일 가상 시스템 은 커 널 과 커 널 모듈 이 프로 세 스 (process) 에 정 보 를 보 내 는 메커니즘 (그래서 '/ proc' 라 고 함) 입 니 다. 이 가짜 파일 시스템 은 커 널 내부 데이터 구조 와 상호작용 을 하여 프로 세 스 와 관련 된 유용 한 정 보 를 얻 을 수 있 습 니 다. 실행 중 (on the fly) 설정 을 변경 할 수 있 습 니 다 (커 널 매개 변 화 를 통 해).다른 파일 시스템 과 달리 / proc 는 하 드 디스크 가 아 닌 메모리 에 존재 합 니 다.proc 파일 시스템 이 제공 하 는 정 보 는 다음 과 같 습 니 다.
프로 세 스 정보: 시스템 의 모든 프로 세 스 는 proc 의 하위 디 렉 터 리 에 같은 이름 의 프로 세 스 ID 가 있 습 니 다. cmdline, mem, root, stat, statm, status 를 찾 을 수 있 습 니 다.프로 세 스 루트 디 렉 터 리 와 같은 일부 정 보 는 슈퍼 사용자 만 볼 수 있 습 니 다.기 존 프로 세 스 정 보 를 단독으로 포함 하 는 프로 세 스 마다 사용 가능 한 전문 링크 가 있 습 니 다. 시스템 의 모든 프로 세 스 는 프로 세 스 정 보 를 가리 키 는 단독 링크 가 있 습 니 다. 그 용 도 는 프로 세 스에 서 명령 행 정 보 를 가 져 오 는 것 입 니 다.
시스템 정보: 전체 시스템 정 보 를 알 아야 한다 면 / proc / stat 에서 도 얻 을 수 있 습 니 다. 그 중에서 CPU 점용 상황, 디스크 공간, 메모리 교환, 중단 등 을 포함 합 니 다.
CPU 정보: / proc / CPU info 파일 을 이용 하여 중앙 처리 장치 의 현재 정확 한 정 보 를 얻 을 수 있 습 니 다.
부하 정보: / proc / loadavg 파일 은 시스템 부하 정 보 를 포함 합 니 다.
시스템 메모리 정보: / proc / meminfo 파일 은 시스템 메모리 의 상세 한 정 보 를 포함 하고 있 으 며, 물리 적 메모리 의 수량, 교환 가능 한 공간의 수량, 남 은 메모리 의 수량 등 을 표시 합 니 다.
/ proc 디 렉 터 리 의 주요 파일 설명
- apm 고급 전원 관리 정보
- cmdline 이 파일 은 커 널 시작 명령 줄 을 보 여 줍 니 다.
- CPU info 중앙 처리 장치 정보
- devices 에서 사용 할 수 있 는 장치 (블록 장치 / 문자 장치)
- dma 현재 사용 중인 DMA 채널 표시
- filesystems 핵심 설정 파일 시스템
- ioports 현재 사용 중인 I / O 포트
- interrupts 이 파일 의 줄 마다 보류 중단 이 있 습 니 다.
- kcore 시스템 물리 메모리 이미지
- kmsg 핵심 출력 메시지, 로그 파일 로 보 내기
- mdstat 이 파일 은 md 장치 드라이버 가 제어 하 는 RAID 장치 정 보 를 포함 하고 있 습 니 다.
- loadavg 시스템 평균 부하 균형
- meminfo 메모리 사용 정보, 물리 메모리 및 교환 메모리 포함
- modules 이 파일 은 커 널 모듈 을 불 러 올 수 있 는 정 보 를 제공 합 니 다.lsmod 프로그램 은 이 정보 로 모듈 의 이름, 크기, 사용 수량 에 대한 정 보 를 표시 합 니 다.
- net 네트워크 프로 토 콜 상태 정보
- partitions 시스템 식별 구역 표
- pci pci 장치 정보
- scsi scsi 장치 정보
- self 프로 세 스 디 렉 터 리 를 보기 위 한 기호 연결
- stat 이 파일 에 포 함 된 정 보 는 CPU 이 용 률, 디스크, 메모리 페이지, 메모리 교환, 모든 중단, 접촉 스위치 및 자체 제공 시간 이 있 습 니 다.
- swaps 교환 파 티 션 의 사용 상황 을 보 여 줍 니 다.
- uptime 이 파일 은 마지막 시스템 에서 들 어 온 초 수 와 그 중 몇 초 동안 비어 있 습 니까?
- version 이 파일 은 실행 중인 커 널 버 전 을 설명 하 는 한 줄 의 내용 만 있 습 니 다.표준 프로 그래 밍 방법 으로 분석 하여 필요 한 시스템 정 보 를 얻 을 수 있다.
CPU 정보 가 져 오기
#!/usr/bin/env Python
from __future__ import print_function
from collections import OrderedDict
import pprint
def CPUinfo():
''' Return the information in /proc/CPUinfo
as a dictionary in the following format:
CPU_info['proc0']={...}
CPU_info['proc1']={...}
'''
CPUinfo=OrderedDict()
procinfo=OrderedDict()
nprocs = 0
with open('/proc/CPUinfo') as f:
for line in f:
if not line.strip():
# end of one processor
CPUinfo['proc%s' % nprocs] = procinfo
nprocs=nprocs+1
# Reset
procinfo=OrderedDict()
else:
if len(line.split(':')) == 2:
procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip()
else:
procinfo[line.split(':')[0].strip()] = ''
return CPUinfo
if __name__=='__main__':
CPUinfo = CPUinfo()
for processor in CPUinfo.keys():
print(CPUinfo[processor]['model name'])
목록 1 을 간단히 설명 하고 / proc / CPU info 의 정 보 를 읽 고 list 를 되 돌려 주 며 핵심 마다 dict 를 되 돌려 줍 니 다.그 중에서 list 는 괄호 로 묶 은 질서 있 는 요소 집합 입 니 다.List 는 0 으로 표 시 된 배열 로 시작 할 수 있 습 니 다.Dict 는 Python 의 내 장 된 데이터 형식 중 하나 로 키 와 값 간 의 일대일 관 계 를 정의 합 니 다.OrderedDict 는 사전 하위 클래스 로 내용 이 증가 하 는 순 서 를 기억 할 수 있 습 니 다.일반적인 dict 는 삽입 순 서 를 추적 하지 않 고 교체 처리 할 때 키 가 산 목록 에 저 장 된 순서에 따라 값 을 생 성 합 니 다.OrderedDict 에 서 는 반대로 요소 가 삽 입 된 순 서 를 기억 하고 교체 기 를 만 들 때 이 순 서 를 사용 합 니 다.
시스템 부하 정보 가 져 오기
#!/usr/bin/env Python
import os
def load_stat():
loadavg = {}
f = open("/proc/loadavg")
con = f.read().split()
f.close()
loadavg['lavg_1']=con[0]
loadavg['lavg_5']=con[1]
loadavg['lavg_15']=con[2]
loadavg['nr']=con[3]
loadavg['last_pid']=con[4]
return loadavg
print "loadavg",load_stat()['lavg_15']
목록 2: 목록 2 읽 기 / proc / loadavg 의 정 보 를 간단하게 설명 합 니 다. import os: Python 에서 import 는 서로 다른 모듈 을 가 져 오 는 데 사 용 됩 니 다. 시스템 제공 과 사용자 정의 모듈 을 포함 합 니 다.그 기본 형식 은 import 모듈 이름 [as 별명] 입 니 다. 모듈 의 일부 나 모든 내용 만 가 져 오 면 형식: from 모듈 이름 import * 로 해당 모듈 을 가 져 올 수 있 습 니 다.OS 모듈 os 모듈 은 통 일 된 운영 체제 인터페이스 함 수 를 제공 합 니 다. os 모듈 은 서로 다른 운영 체제 플랫폼, 예 를 들 어 nt, posix 중의 특정한 함수 간 에 자동 으로 전환 하여 크로스 플랫폼 작업 을 실현 할 수 있 습 니 다.
메모리 사용 현황 가 져 오기
!/usr/bin/env Python
from __future__ import print_function
from collections import OrderedDict
def meminfo():
''' Return the information in /proc/meminfo
as a dictionary '''
meminfo=OrderedDict()
with open('/proc/meminfo') as f:
for line in f:
meminfo[line.split(':')[0]] = line.split(':')[1].strip()
return meminfo
if __name__=='__main__':
#print(meminfo())
meminfo = meminfo()
print('Total memory: {0}'.format(meminfo['MemTotal']))
print('Free memory: {0}'.format(meminfo['MemFree']))
네트워크 인터페이스의 입 출력 가 져 오기
#!/usr/bin/env Python
import time
import sys
if len(sys.argv) > 1:
INTERFACE = sys.argv[1]
else:
INTERFACE = 'eth0'
STATS = []
print 'Interface:',INTERFACE
def rx():
ifstat = open('/proc/net/dev').readlines()
for interface in ifstat:
if INTERFACE in interface:
stat = float(interface.split()[1])
STATS[0:] = [stat]
def tx():
ifstat = open('/proc/net/dev').readlines()
for interface in ifstat:
if INTERFACE in interface:
stat = float(interface.split()[9])
STATS[1:] = [stat]
print 'In Out'
rx()
tx()
while True:
time.sleep(1)
rxstat_o = list(STATS)
rx()
tx()
RX = float(STATS[0])
RX_O = rxstat_o[0]
TX = float(STATS[1])
TX_O = rxstat_o[1]
RX_RATE = round((RX - RX_O)/1024/1024,3)
TX_RATE = round((TX - TX_O)/1024/1024,3)
print RX_RATE ,'MB ',TX_RATE ,'MB'
crtrl. py 아파 치 서버 프로 세 스 를 감시 하 는 Python 스 크 립 트
#!/usr/bin/env Python
import os, sys, time
while True:
time.sleep(4)
try:
ret = os.popen('ps -C apache -o pid,cmd').readlines()
if len(ret) < 2:
print "apache , 4 "
time.sleep(3)
os.system("service apache2 restart")
except:
print "Error", sys.exc_info()[1]
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Python 이 리 눅 스 모니터링 을 실현 하 는 방법 입 니 다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다. 궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요. 소 편 은 제때에 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.