당신은 주제를 찾고 있습니까 “파이썬 실시간 모니터링 – 실시간으로 최신 데이터를 불러오는 Websocket API, REST API와 어떤 차이가 있을까?“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 투이컨설팅-투이톡 이(가) 작성한 기사에는 조회수 6,527회 및 좋아요 126개 개의 좋아요가 있습니다.
파이썬 실시간 모니터링 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 실시간으로 최신 데이터를 불러오는 Websocket API, REST API와 어떤 차이가 있을까? – 파이썬 실시간 모니터링 주제에 대한 세부정보를 참조하세요
API에 대해 많이 들어보셨죠? API라고 하면 대부분 REST API를 떠올리시는데요, 이번 영상은 REST API가 갖고 있는 한계점에 대해 살펴보고, REST API의 단점을 커버할 수 있는 또다른 종류의 API인 Websocket API가 무엇인지 알아봅니다.
00:00 인트로
00:49 REST API 한계
04:02 Websocket API 소개
04:48 REST API와 Websocket API 실제 비교
* 투이톡 구독하기: https://www.youtube.com/channel/UCNOcyPHY9cMDE1f05yvvH7g?sub_confirmation=1
* 투이컨설팅 홈페이지: http://www.2e.co.kr/
#API #REST #Websocket
파이썬 실시간 모니터링 주제에 대한 자세한 내용은 여기를 참조하세요.
Python으로 실시간 로그 파일 모니터링 코드 구현 – 삵 izz well
파이썬(Python)으로 실시간(real-time) 로그(log) 파일 모니터링(monitoring) 코드 구현 Python으로 프로그램을 구현할 때 계속해서 로그를 찍는 경우 …
Source: gentlesark.tistory.com
Date Published: 5/19/2021
View: 3260
Python으로 데이터 모니터링하는 대시보드 실행파일 만들기
실시간 센서데이터 모니터링을 위한 비전 … 1. Python으로 데이터 모니터링하 . … Python으로 데이터 모니터링하는 GUI 대시보드 실행파일 만들기.
Source: wikidocs.net
Date Published: 1/1/2022
View: 3968
Python으로 실시간 로그 파일 모니터링 코드 구현
텍스트 파일 및 로그파일 실시간 모니터링 프로그램. 프로필. 고고싱. 2. 이웃추가. 본문 기타 기능. 본문 폰트 크기 조정 본문 폰트 크기 작게 보기.
Source: surprise.ciacerpbikicomp.tk
Date Published: 7/17/2021
View: 8875
D3 및 PYTHON을 사용한 실시간 데이터 시각화 – 블로그 – Quish
실시간 데이터 시각화는 실시간으로 빠르게 업데이트되는 데이터가 있고 애플리케이션이 ‘펄스’를 유지하고 데이터를 수동적으로 모니터링해야 할 때 적용할 수 …
Source: ko.quish.tv
Date Published: 5/20/2022
View: 2949
3. PLC 장비 실시간 모니터링 시스템 구축 – 블로그 – 네이버
Python. 3. PLC 장비 실시간 모니터링 시스템 구축 … 모니터링 시스템 구축을 위해 데이터의 시각화는 실시간 그래프로 표현.
Source: blog.naver.com
Date Published: 4/24/2021
View: 8929
Python으로 실시간 로그 파일 모니터링 코드 구현
Employee computer monitoring software concept icon with text. Remote team management. PPT page vector template. Brochure, magazine.
Source: single.repabeachfsonsomoh.ml
Date Published: 10/29/2022
View: 4875
Python으로 네트워크 트래픽 모니터를 만드는 방법 – Morioh
불행히도 psutil 총 네트워크 사용량 또는 네트워크 인터페이스당 네트워크 사용량만 추적할 수 있습니다. 프로세스별 사용량을 모니터링하려면 Scapy라는 또 다른 …
Source: morioh.com
Date Published: 3/19/2022
View: 6936
Python Code 모니터링하고 변화를 감지하는 웹사이트의 긁어 …
내가 원하는 파이썬 코드를 저장할 수 있는 긁어 콘텐츠 또는 HTML 코드에서는 현재/실시간. 후 특정 수동으로 할당된 시간 간격 코드는 다시 한 번 실행 …
Source: ko.code-paper.com
Date Published: 3/16/2022
View: 6388
주제와 관련된 이미지 파이썬 실시간 모니터링
주제와 관련된 더 많은 사진을 참조하십시오 실시간으로 최신 데이터를 불러오는 Websocket API, REST API와 어떤 차이가 있을까?. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 파이썬 실시간 모니터링
- Author: 투이컨설팅-투이톡
- Views: 조회수 6,527회
- Likes: 좋아요 126개
- Date Published: 2021. 3. 29.
- Video Url link: https://www.youtube.com/watch?v=LddPLO4bXmQ
Python으로 실시간 로그 파일 모니터링 코드 구현
반응형
파이썬(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
” % 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문을 빠져나오고 프로그램은 종료된다.
별 것 아닌 기능이지만 직접 구현하려고 하니 제법 헷갈렸다. 누군가 비슷한 고민을 하는 분에게 도움이 되었기를 바라며 마친다.
* 광고 클릭은 블로그 유지에 큰 도움이 됩니다. 항상 감사드립니다.
반응형
Python으로 실시간 로그 파일 모니터링 코드 구현
텍스트 모니터링 소프트웨어
누군가 비슷한 고민을 하는 분에게 도움이 되었기를 바라며 마친다. 항상 감사드립니다. 저작자표시 비영리. 태그 Python log monitoring , Python 로그 모니터링 , Python 실시간 출력 찍기 , python강좌 , Python예제 , 로그 parser , 로그 모니터링 , 모니터링 지연시간 , 파이썬 로그 모니터링 , 파이썬 실시간 출력 모니터링. 댓글 0 비밀글. 누구도 백신이 멀쩡한 txt를 삭제할거라고 생각하지 못하겠지요. 실제로 txt는 아니고 어떤 백신프로그램이 PPT 파일을 몽땅 삭제해버린 문제가 있었습니다 , 어떤 프로세스가 txt를 삭제하는지 모니터링이 필요할 것 입니다.
어디에 어떤 파일이 생성되는지 확인 해 봐야 할 것입니다. 이런 경우 동물적 감각? 을 이용하지 않으면 웬만해서는 찾기 어렵습니다. 이때는 폴더에 대한 모니터링이 필요할 것 입니다. 위 시나리오들은 실제 제가 진행했던 Case를 기반으로 나열한 것인데 그 이외에도 Troubleshooting이나 특정한 목적을 위해 파일을 모니터링 해야 하는 시나리오가 많이 있을 것입니다. 이런 경우 감사 정책을 설정할 수 있으나 무겁기도 하고 그리 효율적이지 못합니다. 이럴 때는 좋은 방법이 무엇이 있을까요? MySQL 성능 조정 문제를 식별 및 수정하는 가장 빠른 방법. 온 프레미스, 가상화 또는 클라우드에서 단일 뷰에서 SAP ASE 성능을 모니터링 및 최적화. 합리적인 가격으로 Help Desk 티켓 관리 및 자산 관리 소프트웨어. Remote control and systems management tools in one easy-to-use package. Deliver the tools IT professionals need in a cloud-based, remote support solution. 원활한 응용 프로그램 및 인프라 모니터링을 만나보세요.
포괄적 가시성을 확보하여 응용 프로그램 중심의 신속한 문제 해결을 경험해 보십시오. Cloud-hosted log management for faster troubleshooting of infrastructure and application issues. 강력하고 사용하기 쉬운 가동 시간 및 성능 모니터링을 통해 웹 사이트를 더욱 빠르고 안정적으로 유지하십시오. Cost-effective, hosted, and scalable full-stack, multi-source log management solution. SolarWinds는 웹 사이트에서 쿠키를 사용하여 귀하의 온라인 환경을 더욱 쉽고 편리하게 만들어 드립니다. 저희 웹 사이트를 이용함으로써 귀하는 쿠키 사용에 동의하시게 됩니다.
컴퓨터 활동 모니터링. PC 하드웨어 모니터링 프로그램 HWiNFO. SolarWinds 무료 네트워크 관리 & 무료 네트워크 모니터링 소프트웨어 다운로드?
쿠키에 관한 자세한 내용은 쿠키 정책 을 참조하십시오. Toggle navigation. 제품 네트워크 관리. 시스템 관리. 데이터베이스 관리. IT 보안.
윈도우에서 로그 파일 모니터링하기 – 야라바
IT 서비스 관리. 응용 프로그램 관리. 관리형 서비스 공급자. 모든 제품. Log Analyzer Network Topology Mapper Engineer’s Toolset ipMonitor Kiwi CatTools Kiwi Syslog Server. Network Bandwidth Analyzer Pack Log and Network Performance Pack IP Control Bundle.
모든 네트워크 관리 제품 보기. Server Configuration Monitor Log Analyzer Access Rights Manager Application Performance Monitoring Web Performance Monitor SolarWinds Backup. Application Performance Optimization Pack IT Operations Manager. 모든 시스템 관리 제품 보기. Database Performance Analyzer. 클라우드 및 온-프레미스를위한 크로스 플랫폼 데이터베이스 최적화 및 튜닝. 한 번의 설치로 다음 데이터베이스 플랫폼을 모니터링합니다. Oracle SQL Server Azure SQL 데이터베이스 MySQL. Database Performance Monitor. 기존, 오픈 소스 및 클라우드 네이티브 데이터베이스에 대한 SaaS 기반 데이터베이스 성능 모니터링.
이 플랫폼 등에서 사용 가능.
실시간 모니터링을위한 컴퓨터의 창고 관리 소프트웨어 애플리케이션 프리미엄 사진
PostgreSQL MongoDB MySQL Redis. 모든 데이터베이스 관리 제품 보기. Serv-U Managed File Transfer Serv-U Secured FTP Serv-U Gateway. 모든 IT 보안 제품 보기.
개념, 광고, 구도, 기사-출판, 날씬한
Service Desk Web Help Desk ipMonitor 데스크탑 관리 Dameware Remote Everywhere Dameware Remote Support Dameware Mini Remote Control Help Desk Essentials. 모든 IT 서비스 관리 제품 보기. SolarWinds Service Desk는 TrustRadius 우승자입니다. Service Desk는 다음 두 카테고리에서 수상했습니다. IT 자산 관리 와 IT 서비스 관리 ITSM. AppOptics SaaS 기반의 인프라스트럭처 및 응용프로그램 성능 모니터링 및 추적, 그리고 하이브리드와 클라우드 커스텀 응용 프로그램을 위한 맞춤 매트릭. Loggly 하이브리드 응용 프로그램, 클라우드 응용 프로그램 및 인프라스트럭처로 부터 얻어진 테라바이트 단위의 머신 데이터에 대한 빠르고, 강력한, 호스트 통합, 분석 및 시각화.
Papertrail 클라우드 애플리케이션과 환경에 대한 실시간 라이브 테일링, 검색 및 문제 해결. Pingdom 방화벽 외부에서 웹 애플리케이션의 실제 사용자와 종합적 모니터링. Web Performance Monitor 방화벽 내의 웹 응용프로그램 성능 모니터링. 모든 애플리케이션 관리 제품 보기. x Linux, Solaris 또는 FreeBSD의 Apache 서버 2. conf 파일 Sensor Txlogd. conf 파일 매개 변수 필수 매개 변수 선택적 매개 변수 이벤트 데이터 레코드 필드 이벤트 데이터 레코드 필드 기준 이벤트 데이터 레코드 필드 확장 가능한 필드 샘플 구성 파일 샘플 구성 파일 Txlogd.
설명서 Analytics Data Workbench 도움말 감사 로그 모니터링. 권장 빈도: 문제 해결에 필요한 일별 또는 일별 연결 문제를 해결할 때 감사 로그가 매우 유용할 수 있습니다 Insight Server. 를 통해 access. 활성 상태의 아이콘을 마우스 오른쪽 단추로 Insight Server 클릭하고 을 클릭합니다 Server Files. 에서 Server Files Manager을 클릭하여 콘텐츠 Audit 를 봅니다. com의 리소스 Third Party Integrations Customer Profiles Audience Targeting Video Analytics Data Ingestion Attribution.
이 페이지에서는. 다음 보기:.
Register for free. 이 도구는 해당 유형에서 일반적인 대표 프로그램으로서, 고용주가 외부와의 커뮤니케이션, 애플리케이션 실행 또는 파일 액세스와 같은 직원 활동을 모두 보거나 선택할 수 있는 기능을 제공합니다. 패시브 모니터링 솔루션과 사전 대응적 데이터 유출 방지 DLP 시스템 간의 주요 차이점은 잠재적 위협을 처리하는 방식입니다. 휴리스틱 분석 및 사전 대응적 필터링은 데이터 유출을 방지하고 직원의 위법 행위를 중지시키고 사기에 대처하기 위한 기술적 장벽을 만들 수 있을 것입니다. 반면, 패시브 모니터링은 직원의 활동을 중지하거나 막지 않으면서 정보를 수집할 수 있습니다.
수집된 정보는 고용주가 빠른 피드백을 제공하거나 하드 데이터로 보안 사고를 조사하는 데 유용합니다. Refog 컴퓨터 활동 소프트웨어는 컴퓨터 감시 제품에서 패시브 모니터링만 사용하며, 가장 ‘사전 대응적’ 조치는 잠재적 보안 위반이 발생할 경우 지정된 보안 담당자에게 즉시 알림을 전송하는 것입니다.
Refog 제품은 Windows 데스크톱 및 네트워크 Refog Employee Monitor 에서 사용하도록 설계되었으며, Refog Terminal Monitor는 터미널 서버 클라이언트를 모니터링하도록 설계되었습니다. 편리한 관리 인터페이스를 통해 모든 사용자 활동을 중앙에서 확인할 수 있습니다. 유연한 필터와 검색 기능이 제공됩니다. 수집된 모든 정보는 로컬로 안전하게 암호화되어 저장됩니다. 감시는 존재 자체로 기업 정책 시행에 도움이 됩니다.
D3 및 Python을 사용한 실시간 데이터 시각화
대부분의 데이터 시각화는 사용자 요청에 따라 가져오는 정적 데이터 집합으로 구성됩니다. 따라서 사용자가 새로 고칠 때만 데이터가 업데이트됩니다. 이것은 요청-응답 패턴입니다: 사용자가 정보를 요청하고, 서버가 데이터로 응답하고, 클라이언트 측 시각화가 채워집니다.
실시간 데이터 시각화는 실시간으로 빠르게 업데이트되는 데이터가 있고 애플리케이션이 ‘펄스’를 유지하고 데이터를 수동적으로 모니터링해야 할 때 적용할 수 있습니다. 즉, 브라우저를 열어 놓는 동안 자동으로 업데이트되는 차트가 있습니다. 실시간 데이터 비주얼리제이션이 필요한 몇 가지 예에는 다음이 포함되지만 이에 국한되지는 않습니다.
주식/금융상품 분석
임베디드 시스템
웹 트래픽 또는 서버 데이터
보안 시스템
지리 공간 / GPS 모니터링 (우버를 생각
비즈니스 인텔리전스
마케팅 인텔리전스
산업 또는 제조
사물인터넷 기기
실시간 모니터링이 필요한 기타 사항
이 튜토리얼은 매우 기본적인 실시간 데이터 시각화 구현의 구성 요소를 이해하려는 사람들을 도울 것입니다.
우리가 사용하는 것
언어:
Python — 서버 측 데이터
Javascript — 클라이언트 측 차트 렌더링
JS 라이브러리:
d3.js
crossfilter.js
dc.js : d3 및 크로스필터가 원활하게 작동하도록 합니다.
웹 소켓, ioloop 및 웹을 위한 파이썬의 토네이도 라이브러리
우리는 이러한 도구를 사용하여 매초 일부 모의 데이터를 게시하는 웹 소켓 서버를 구축할 것입니다. 그런 다음 d3, crossfilter 및 dc.js를 사용하여 정적 대화형 차트를 작성합니다.
마지막으로 d3 차트를 websocket 서버에 연결하고 차트 업데이트가 실시간으로 발생합니다.
시작 및 설정하기 전에
이 연습에서는 python 2.7을 사용하고 있습니다.
파이썬 다운로드 여기 . 설치한 다음 cmd 또는 터미널을 열고 python을 입력하여 적절한 설정을 확인합니다. 명령 프롬프트가 표시되면 모든 것이 정상일 것입니다.
python 설치에 문제나 오류가 있는 경우 여기에서 시간보다 더 나은 도움을 줄 수 있는 많은 리소스가 stackoverflow에 있습니다.
다음:
핍 설치
텍스트 편집을 위해 Sublime Text를 받으세요. 또는 원하는 텍스트 편집기를 사용하십시오.
‘rt-data-viz’라는 새 폴더를 만듭니다.
Python으로 간단한 Websocket 서버 구축하기
먼저 데이터 소스를 빌드합니다. 이 튜토리얼에서는 주기적으로 새로운 데이터를 보내는 간단한 웹 소켓 서버를 구축합니다.
‘rt-data-viz’ 폴더에서 새 파일을 만들고 websocket_server.py라는 이름으로 저장합니다.
|_+_|를 설치해야 합니다. websockets와 ioloop을 실행하기 위한 패키지:
터미널/콘솔에서 실행 |_+_|
websocket_server.py에서 지금 코딩을 시작할 수 있습니다.
먼저 필요한 모든 패키지를 가져옵니다.
tornado
토네이도의 웹 소켓을 사용하여 핸들러 클래스를 빌드해야 합니다. 다음에 채울 몇 가지 빈 함수를 추가하고 있습니다.
pip install tornado
empty_handler.py
이제 웹 소켓 핸들러를 작성합니다. 우리에게 가장 중요한 기능은 |_+_|입니다. 그것은 우리가 임의의 데이터의 json 객체를 만들고 |__+_|를 통해 보내는 곳입니다.
메시지를 보낸 후 ioLoop를 사용하여 주기적으로 데이터를 보낼 타임아웃을 생성합니다. 마지막으로 websocket 웹 앱 인스턴스를 만들고 포트 8001에서 수신 대기하도록 설정한 다음 ioloop 인스턴스를 시작합니다. 완성된 websocket_server.py:
import time import random import json import datetime from tornado import websocket, web, ioloop from datetime import timedelta from random import randint
handler_complete.py
rt-data-viz 폴더의 명령 프롬프트로 이동하고 |_+_|를 입력하여 이 서버를 시작할 수 있습니다. 아무 일도 일어나지 않을 것입니다.
소켓이 활성화되기 위해서는 클라이언트 측 코드가 해당 포트에서 연결을 열도록 해야 합니다. 다음에 클라이언트 측 코드를 만들고 실행한 후에 이것을 볼 수 있습니다.
D3 및 Crossfilter로 차트 작성
사용할 것입니다 |_+_| 그리고 |_+_| 동일한 데이터를 공유하는 두 개의 차트를 생성합니다.
|_+_| 데이터 및 그룹 변형을 기반으로 차원을 생성할 수 있는 함수로 다변수 데이터 세트를 탐색하는 데 도움이 됩니다. |_+_| 라이브러리는 d3.js와 crossfilter.js를 함께 결합하므로 사용자 상호 작용 시 실제 차트 자체를 사용하여 데이터를 필터링할 수 있습니다.
자세한 내용은 웹사이트를 방문하세요. d3.js , crossfilter.js , dc.js
한 세트의 들어오는 데이터를 사용하여 두 개의 차트를 만들 것입니다.
연도별 지출 금액을 표시하는 1개의 원형 차트
한 사람이 지출한 돈을 보여주는 1개의 막대 차트. 다음과 같이 표시됩니다.
사용자가 차트의 일부를 클릭하면 클릭한 차트가 모두 필터링되고 다른 차트에도 데이터 변경 사항이 반영됩니다.
여기에서 차트에서 2014년을 클릭하면 데이터가 2014년만 반영하는 것을 볼 수 있으며 Aziz와 Jarrod에는 지금까지 데이터가 없습니다.
이것을 만들려면|_+_|를 추가하세요. 당신의 |_+_| 폴더. 다음은 필요한 라이브러리가 있는 기본 템플릿입니다.
class WebSocketHandler(websocket.WebSocketHandler): def open(self): print ‘Connection established.’ #close connection def on_close(self): print ‘Connection closed.’ # Our function to send new (random) data for charts def send_data(self): print ‘Sending Data’
datavis-tempate.html
우리 몸 안에 각각의 차트와 데이터를 담기 위해 두 개의 div를 생성해야 합니다.
send_data()
self.write_message()
그런 다음 d3/crossfilter 작업을 시작하겠습니다. 다음과 같은 모의 데이터로 json 객체의 정적 배열을 만듭니다.
import time import random import json import datetime from tornado import websocket, web, ioloop from datetime import timedelta from random import randint paymentTypes = [‘cash’, ‘tab’, ‘visa’,’mastercard’,’bitcoin’] namesArray = [‘Ben’, ‘Jarrod’, ‘Vijay’, ‘Aziz’] class WebSocketHandler(websocket.WebSocketHandler): #on open of this socket def open(self): print ‘Connection established.’ #ioloop to wait for 3 seconds before starting to send data ioloop.IOLoop.instance().add_timeout(datetime. timedelta(seconds=3), self.send_data) #close connection def on_close(self): print ‘Connection closed.’ # Our function to send new (random) data for charts def send_data(self): print ‘Sending Data’ #create a bunch of random data for various dimensions we want qty = random.randrange(1,4) total = random.randrange(30,1000) tip = random.randrange(10, 100) payType = paymentTypes[random.randrange(0,4)] name = namesArray[random.randrange(0,4)] spent = random.randrange(1,150); year = random.randrange(2012,2016) #create a new data point point_data = { ‘quantity’: qty, ‘total’ : total, ‘tip’: tip, ‘payType’: payType, ‘Name’: name, ‘Spent’: spent, ‘Year’ : year, ‘x’: time.time() } print point_data #write the json object to the socket self.write_message(json.dumps(point_data)) #create new ioloop instance to intermittently publish data ioloop.IOLoop.instance().add_timeout(datetime.timedelta(seconds=1), self.send_data) if __name__ == ‘__main__’: #create new web app w/ websocket endpoint available at /websocket print ‘Starting websocket server program. Awaiting client requests to open websocket …’ application = web.Application([(r’/websocket’, WebSocketHandler)]) application.listen(8001) ioloop.IOLoop.instance().start()
그런 다음 최종적으로 ‘교차 필터링된’ 데이터를 저장할 변수를 만듭니다. |_+_|
이 데이터로 이제 교차 필터의 |_+_|를 사용하여 차원을 만들 수 있습니다. 기능. 이 예에 사용할 3개의 차원이 있습니다: Name, Year 및 Spent:
python websocket_server.py
이러한 차원이 설정되면 이제 그룹화할 수 있습니다. 조금 단순화하기 위해 그룹은 기본적으로 각 차트를 채우는 최종 결과입니다. 위의 이미지에서 원형 차트는 각 연도를 보여주고 각 원형 조각의 크기는 해당 연도에 지출한 금액을 나타냅니다. 따라서 그룹을 지출PerYear라고 하고 차트에서 사용합니다. 다음과 같습니다.
d3.js
그리고 두 번째 차트는 1인당 지출 금액(또는 json 객체의 Name)을 보여줍니다.
crossfilter.js
지금까지의 코드는 다음과 같습니다.
crossfilter
data-setup-crossfilter-d3.html
이제 데이터, 차원 및 그룹 설정이 완료되었습니다. 다음으로 차트를 렌더링합니다.
차트 렌더링
렌더링 기능을 만들어 봅시다. 우리는 그것을 |_+_|라고 부를 것입니다. dc.js의 |__+_|로 차트를 렌더링합니다. 기능:
dc.js
내부 |_+_| 우리는 |_+_| 우리가 이전에 만든 div. 원형 차트에서 우리는 연도 차원과 지출당년 그룹화를 사용하고 있습니다. 또한 파이 차트에 특정한 너비, 높이 및 innerRadius 속성을 설정합니다.
index.html file
rowChart/막대 차트의 경우 비슷하게 설정합니다.
rt-data-viz
탄력적인 차트 만들기
이 막대 차트에 더 많은 데이터를 추가할 예정이므로 더 큰 데이터 세트에 ‘맞도록’ 동적으로 크기를 조정해야 합니다. ElasticX를 true로 설정하여 이를 수행합니다.
Dimensional Charting
dc-js-render-function.js
이제 작동하는 차트 코드를 볼 수 있습니다. render_plot() 함수를 호출하는 최종 d3.js + crossfilter.js + dc.js가 있습니다.
datavis-static.html
멋지네요. 실제로 보고 싶을 것입니다. 로컬 웹 서버를 실행하고 파일을 가리켜야 합니다. cmd 프롬프트/터미널에서 rt-data-viz 폴더를 열고 다음을 입력합니다.
var data1 = [ {Name: ‘Ben’, Spent: 330, Year: 2014, ‘total’:1}, {Name: ‘Aziz’, Spent: 1350, Year: 2012, ‘total’:2}, {Name: ‘Vijay’, Spent: 440, Year: 2014, ‘total’:2}, {Name: ‘Jarrod’, Spent: 555, Year: 2015, ‘total’:1},];
|_+_| 모듈이 |__+_|에 병합되었습니다. 파이썬 3.0에서. 2to3 도구는 소스를 3.0으로 변환할 때 자동으로 가져오기를 조정합니다. 따라서 python 3의 경우 명령은 다음과 같습니다. py -m http.server 3000
터미널을 열어두고 선택한 웹 브라우저에서 탭을 엽니다. 주소로 이동 http://localhost:3000/ 그것을 라이브로 보려면.
Websocket 서버에서 실시간 업데이트로 D3 차트 업데이트
이제 매초마다 새로운 데이터를 게시하는 웹 소켓 서버가 있고 d3 및 교차 필터 기능을 노출하는 정적 차트가 있습니다. 우리는 그들이 지금 말하게 해야 합니다.
이제 웹 소켓에 연결하고 웹 소켓의 데이터를 처리하고 실시간으로 차트 솔루션을 올바르게 업데이트하도록 차트 코드를 수정해야 합니다.
인덱스 파일의 자바스크립트에서 포트 8001에서 실행 중인 websocket_server.py에 연결하는 새 웹 소켓 연결을 생성해야 합니다. 다음과 같이 새 웹 소켓을 생성하여 수행합니다.
var xfilter = crossfilter(data1);
그런 다음 websocket이 업데이트를 게시할 때마다 차트를 업데이트하는 함수가 필요합니다. Websocket의 |_+_| 기능:
dimension()
var yearDim = xfilter.dimension(function(d) {return +d.Year;}); var spendDim = xfilter.dimension(function(d) {return Math.floor(d.Spent/10);}); var nameDim = xfilter.dimension(function(d) {return d.Name;});
var spendPerYear = yearDim.group().reduceSum(function(d) {return +d.Spent;});
var spendPerName = nameDim.group().reduceSum(function(d) {return +d.Spent;});
Dimensional Charting var yearRingChart = dc.pieChart(‘#chart-ring-year’), spenderRowChart = dc.rowChart(‘#chart-row-spenders’); var data1 = [ {Name: ‘Ben’, Spent: 330, Year: 2014, ‘total’:1}, {Name: ‘Aziz’, Spent: 1350, Year: 2012, ‘total’:2}, {Name: ‘Vijay’, Spent: 440, Year: 2014, ‘total’:2}, {Name: ‘Jarrod’, Spent: 555, Year: 2015, ‘total’:1}, ]; // set crossfilter with first dataset var xfilter = crossfilter(data1), yearDim = xfilter.dimension(function(d) {return +d.Year;}), spendDim = xfilter.dimension(function(d) {return Math.floor(d.Spent/10);}), nameDim = xfilter.dimension(function(d) {return d.Name;}), spendPerYear = yearDim.group().reduceSum(function(d) {return +d.Spent;}), spendPerName = nameDim.group().reduceSum(function(d) {return +d.Spent;}),
코드의 기능은 다음과 같습니다.
render_plots()
연결-onmessage.js
다음은 웹 소켓 서버와 함께 작동하여 게시된 데이터를 검색하는 전체 index.html입니다.
renderAll()
datavis-full.html
그래서 어떻게 이 모든 것을 하나로 모을 수 있습니까? websocket_server와 클라이언트 측 코드를 각각 실행하기 위해 두 대의 서버를 가동해야 합니다.
아직 파악하지 못했다면 서버를 먼저 시작한 다음 클라이언트를 시작합니다. rt-data-viz 폴더에서 명령 프롬프트를 열고 웹 소켓을 시작합니다.
function render_plots(){ #chart plots go here soon #render all the charts dc.renderAll() }
그런 다음 다른 프롬프트를 열고 클라이언트를 실행합니다.
render_plots()
|_+_| 모듈이 |__+_|에 병합되었습니다. 파이썬 3.0에서. 2to3 도구는 소스를 3.0으로 변환할 때 자동으로 가져오기를 조정합니다. 따라서 python 3의 경우 명령은 다음과 같습니다. py -m http.server 3000
브라우저에서 localhost:3000을 열면 몇 초 후에 차트가 업데이트되는 것을 볼 수 있을 것입니다! 웹 소켓 서버의 새 데이터로 업데이트할 뿐만 아니라 차트를 클릭하면 서로 교차 필터링됩니다.
우리의 최종 제품은 이 YouTube 비디오에 묘사된 것처럼 보일 것입니다.
결론
우리는 websockets, d3, crossfilter 및 dcjs를 다루었습니다. 바라건대 당신은 여기에서 나의 노력에서 많은 가치를 얻었습니다! 당신이 무슨 생각을하는지 제게 알려주세요. 트윗해줘 @benjaminmbrown 가장 빠른 응답을 위해.
모든 코드는 내 github 튜토리얼 리포지토리에서 사용할 수 있습니다.
https://github.com/benjaminmbrown/real-time-data-viz-d3-crossfilter-websocket-tutorial
#파이썬 #D3 #프로그래밍
3. PLC 장비 실시간 모니터링 시스템 구축
Python 3. PLC 장비 실시간 모니터링 시스템 구축 호떠지 ・ URL 복사 본문 기타 기능 공유하기 신고하기 1. 프로젝트 개요 (1) 배경 – 4차 산업혁명 시대는 모든 것이 연결되고, 분석되고, 서비스화되며, 자동화되는 시대. 즉 AI 시대라 할 수 있음 – AI는 다양한 분야에서 사용되고 있으며, 제조 현장에서도 장비들과 연결하여 데이터 수집, 분석 후 활용 중 – 제조 현장에서 사용되는 AI에 대한 이해와 실무 수행 능력을 증진 시키고자 해당 프로젝트를 계획 – 대량의 센서 데이터와 현장에 필요한 ms 단위 응답 속도에 맞춰줄 수 있는 엣지 컴퓨팅이 필요 – 그러나 현재 엣지 컴퓨터와 이상 감지 센서, 여러 가지 센서류와 장비가 부족해 즉각적인 데이터 분석이 불가 – 따라서 AI 모니터링을 부분적으로 구현하는 ‘AI + X 모니터링 시스템’ 구축을 목표로 선정 (2) 목표 – 다수의 공정에서 실시간 데이터 수집 – 수집된 데이터를 데이터베이스 저장 – 비전문가도 알아보기 쉽도록 데이터 시각화 – 이상 감지 알림 (3) 기대 효과 – 각 장비의 실시간 모니터링을 통한 업무 효율성 증대 – 개별 경보에 의한 즉각적인 대응 – 작업자의 편의성 및 신속성 제공 (4) 구현 가능성 – 본 프로젝트를 위한 연습 프로젝트를 진행하여 긍정적인 결과 획득 – 소켓 통신을 이용한 데이터 송수신 확인 – 기존의 FINS 통신 전용 프로그램으로 FINS를 이용한 데이터 송수신 가능 확인 – GUI를 이용하여 데이터 출력과 시각화에 성공 2. 프로젝트 명세 (1) 데이터를 수집할 PLC 장비 – 모니터링 시스템 구축을 위한 PLC 장비들은 다른 인원들의 프로젝트를 이용하여 실제 데이터 수집 – PLC 모델은 일괄적으로 오므론 NJ-301사용 (2) 통신 방식 – 오므론 PLC를 사용하기 때문에 오므론에서 제공하는 FINS 프로토콜을 사용 – FINS 통신 사용 시 각 장비의 PLC 프로그램에 통신을 위한 별도의 래더 작성이 필요하지 않음 (3) 데이터 베이스 – 오픈 소스인 Maria DB를 사용 (4) 개발 언어 및 환경 – 파이썬 – VS CODE (5) 모니터링 UI – 통신을 위한 프로그래밍은 멀티스레딩을 기반으로 제작하여 많은 장비가 동시에 연결 및 데이터 전송을 유도 – GUI는 Tkinter 모듈을 이용하여 제작하며, 대부분의 조작은 버튼을 누르는 형태로 제작 – 모니터링 시스템 구축을 위해 데이터의 시각화는 실시간 그래프로 표현 – 데이터베이스에 축적된 데이터도 실시간으로 조회할 수 있도록 유도 – 모니터링 UI는 각각의 공정 상태를 세부적으로 확인할 수 있도록 하고, 각 페이지 버튼으로 공정별 화면 전환 (6) 이상 감지 알림 – 공정 작동 중 각 장비 및 컨트롤러 에러 등 이상을 감지하면 Opne API를 이용해 카카오톡으로 알림 전송 (7) 제약 조건 – 다른 인원들의 프로젝트 대부분이 서보모터와 축을 이용한 제어 방식 – 또한 장비에 장착되는 센서가 없거나 리밋 센서가 전부 – 모니터링할 때 수집할 데이터 선정과 이상 상태 판별 기준의 어려움이 존재 – 비슷한 양상의 장비들이기 때문에 다양한 데이터의 시각화를 보여주기 어려움 – PLC 래더 프로그램에 통신을 위한 래더는 필요 없지만 데이터를 받아오기 위한 래더 작성 필요 (아래 그림이 데이터를 받아오기 위한 데이터 변환 래더로서 각 PLC 래더 프로그램에 작성 필요) 3. 소스 코드 ※ 본 프로젝트의 소스 코드가 매우 길기 때문에 별도의 캡처는 하지 않고 파일만 올립니다 ※ 색상 코드의 경우 하기 사이트에서 검색하여 사용 가능합니다 https://colorbase.app/colors/3c4842 (1) 연습용 PLC 프로그램 래더 첨부파일 210907_PLC_FINS_Python_display .smc2 파일 다운로드 (2) 소스 코드 및 이미지 파일 등 첨부파일 PLC_Monitoring_Project .zip 파일 다운로드 4. 실제 동작 ※ 영상들에는 표현을 못 했으나 실제 구동 시 멀티 스레드를 이용해 각 장비를 동시에 모니터링 가능합니다 ※ 각 장비의 모니터링은 장비마다 독립적으로 구동되며, 상호 영향을 주지 않습니다 ※ 시간이 없어서 일단 완성된 장비들만 모니터링 시스템을 구축한 것입니다 (1) 전체적인 동작 – PLC-A 그리고 PLC-B 는 기능 테스트를 위해 연습용 PLC 장비를 구동한 것입니다 (2) Delta Robot 구동 및 모니터링 – 해당 장비는 다른 인원이 프로젝트를 진행하며 제작한 장비입니다 (3) Piano Robot 구동 및 모니터링 – 해당 장비는 다른 인원이 프로젝트를 진행하며 제작한 장비입니다 5. 마무리 (1) 아쉬운 점 – 아직 다른 인원들의 프로젝트 장비가 완성되지 않아 구상한 개수를 채우지 못한 것 – 시간이 부족하여 HOME 화면의 구성을 하지 못한 것 – 여러 가지 모듈을 다운 받아 사용하였으나 완전히 이해하지 못하고 단편적인 기능들만 찾아서 사용한 것 – PLC 장비가 구형 장비라 최신 기술을 사용하지 못하고 15년 전 기술인 FINS 통신을 사용한 것 – 장비에서 받아올 수 있는 데이터가 한정적이라 여러 가지 시각화를 하지 못한 것 – 데이터 베이스에 저장된 각 값에 대하여 저장 시의 datetime을 넣지 못한 것 – 에러 발생 메시지 창의 에러 코드가 잘려서 보이는 것 (2) 이로운 점 – Tkinter 모듈의 이해도 상승 – matplotlib 모듈의 이해도 상승과 여러 가지 시각화의 가능성 발견 – 자료형과 자료형 변환에 대한 이해도 상승 – 객체지향 프로그래밍과 모듈화에 대한 단편적인 체험 인쇄
Python으로 네트워크 트래픽 모니터를 만드는 방법
Python으로 네트워크 트래픽 모니터를 만드는 방법
psutil 및 Scapy 라이브러리를 결합하여 Python에서 네트워크 인터페이스 및 프로세스당 네트워크 트래픽 모니터를 만드는 방법을 배웁니다.
컴퓨터의 네트워크 사용량을 모니터링하는 프로그램을 만들고 싶었던 적이 있습니까? 이 튜토리얼에서는 총 네트워크 사용량, 네트워크 인터페이스당 네트워크 사용량, 시스템 프로세스당 네트워크 사용량을 모니터링하는 세 가지 Python 스크립트를 만들 것입니다.
총 네트워크 사용량 네트워크 인터페이스당 네트워크 사용량 프로세스당 네트워크 사용량
시작하려면 필요한 라이브러리를 설치해 보겠습니다.
$ pip install psutil scapy pandas
psutil Python에서 실행 중인 프로세스 및 시스템 및 하드웨어 정보에 대한 정보를 검색하기 위한 크로스 플랫폼 라이브러리이며, 설정된 연결뿐만 아니라 네트워크 통계를 검색하는 데 사용할 것입니다.
1. 총 네트워크 사용량
가장 간단한 프로그램부터 시작합니다. psutil 바이트를 멋진 형식으로 인쇄하는 함수를 가져와서 만들어 보겠습니다 .
import psutil import time UPDATE_DELAY = 1 # in seconds def get_size(bytes): “”” Returns size of bytes in a nice format “”” for unit in [”, ‘K’, ‘M’, ‘G’, ‘T’, ‘P’]: if bytes < 1024: return f"{bytes:.2f}{unit}B" bytes /= 1024 다음으로 psutil.net_io_counters() 네트워크 입력 및 출력 통계를 반환하는 함수를 사용합니다. # get the network I/O stats from psutil io = psutil.net_io_counters() # extract the total bytes sent and received bytes_sent, bytes_recv = io.bytes_sent, io.bytes_recv 이제 다운로드 및 업로드 속도를 계산할 수 있도록 동일한 통계를 얻지만 지연 후에 루프를 입력해 보겠습니다. while True: # sleep for `UPDATE_DELAY` seconds time.sleep(UPDATE_DELAY) # get the stats again io_2 = psutil.net_io_counters() # new - old stats gets us the speed us, ds = io_2.bytes_sent - bytes_sent, io_2.bytes_recv - bytes_recv # print the total download/upload along with current speeds print(f"Upload: {get_size(io_2.bytes_sent)} " f", Download: {get_size(io_2.bytes_recv)} " f", Upload Speed: {get_size(us / UPDATE_DELAY)}/s " f", Download Speed: {get_size(ds / UPDATE_DELAY)}/s ", end="\r") # update the bytes_sent and bytes_recv for next iteration bytes_sent, bytes_recv = io_2.bytes_sent, io_2.bytes_recv 속도를 얻기 위해 새 통계에서 이전 네트워크 통계를 빼기만 하면 되고 다운로드 및 업로드된 총 통계도 포함됩니다. 여러 줄로 인쇄되지 않고 한 줄로 인쇄가 업데이트되기를 원하기 때문에 반환 문자 "\r" 를 함수의 end 매개변수에 전달하여 print() 인쇄 후 같은 줄의 시작 부분으로 돌아갑니다. 실행해보자: $ python network_usage.py 출력은 매초 업데이트됩니다. Upload: 19.96MB , Download: 114.03MB , Upload Speed: 4.25KB/s , Download Speed: 207.00B/s 그리고 그게 다야! 우리는 속도와 함께 총 업로드 및 다운로드 사용량을 얻기 위해 빠른 스크립트를 성공적으로 만들었습니다. 다음 섹션에서는 동일한 작업을 수행하지만 인터페이스당 사용량을 표시합니다. 여러 네트워크 어댑터를 사용하여 여러 네트워크에 연결된 경우에 유용합니다. 2. 네트워크 인터페이스별 네트워크 사용량 이 섹션에서는 이전과 동일한 방법을 사용하지만 다음과 같이 설정 pernic 합니다 True . import psutil import time import os import pandas as pd UPDATE_DELAY = 1 # in seconds def get_size(bytes): """ Returns size of bytes in a nice format """ for unit in ['', 'K', 'M', 'G', 'T', 'P']: if bytes < 1024: return f"{bytes:.2f}{unit}B" bytes /= 1024 # get the network I/O stats from psutil on each network interface # by setting `pernic` to `True` io = psutil.net_io_counters(pernic=True) 이제 while 루프를 입력해 보겠습니다. while True: # sleep for `UPDATE_DELAY` seconds time.sleep(UPDATE_DELAY) # get the network I/O stats again per interface io_2 = psutil.net_io_counters(pernic=True) # initialize the data to gather (a list of dicts) data = [] for iface, iface_io in io.items(): # new - old stats gets us the speed upload_speed, download_speed = io_2[iface].bytes_sent - iface_io.bytes_sent, io_2[iface].bytes_recv - iface_io.bytes_recv data.append({ "iface": iface, "Download": get_size(io_2[iface].bytes_recv), "Upload": get_size(io_2[iface].bytes_sent), "Upload Speed": f"{get_size(upload_speed / UPDATE_DELAY)}/s", "Download Speed": f"{get_size(download_speed / UPDATE_DELAY)}/s", }) # update the I/O stats for the next iteration io = io_2 # construct a Pandas DataFrame to print stats in a cool tabular style df = pd.DataFrame(data) # sort values per column, feel free to change the column df.sort_values("Download", inplace=True, ascending=False) # clear the screen based on your OS os.system("cls") if "nt" in os.name else os.system("clear") # print the stats print(df.to_string()) 이번에 psutil.net_io_counters() 는 각 인터페이스의 사전과 해당 네트워크 통계를 반환합니다. 루프 내에서 while 이 사전을 반복하고 이전과 동일한 계산을 수행합니다. 여러 줄이 pandas 있으므로 통계를 표 형식으로 인쇄하고 cls Windows 또는 clear Linux 또는 macOS에서 명령을 사용하여 업데이트된 결과를 인쇄하기 전에 화면을 지우고 있습니다. 전체 데이터 프레임을 인쇄하려면 함수 내에서 메서드 pandas 를 호출하기 만 하면 됩니다. 실행해보자: to_string()print() $ pip install network_usage_per_interface.py 출력은 다음과 같습니다. 3. 프로세스별 네트워크 사용량 불행히도 psutil 총 네트워크 사용량 또는 네트워크 인터페이스당 네트워크 사용량만 추적할 수 있습니다. 프로세스별 사용량을 모니터링하려면 Scapy라는 또 다른 라이브러리를 사용해야 합니다. Scapy는 시스템에서 나가는 패킷과 들어오는 패킷을 스니핑할 수 있는 기능을 제공하는 강력한 패킷 조작 도구입니다. 사용에 대해 자세히 알고 싶다면 튜토리얼 을 확인하십시오 . 이번에는 psutil 라이브러리를 사용하여 현재 네트워크 연결을 가져오고 소스 및 대상 포트와 연결을 담당하는 프로세스 ID(PID)를 추출합니다. 그런 다음 Scapy를 사용하여 패킷을 스니핑하면서 이 정보를 일치시키고 트래픽 통계를 해당 PID에 넣습니다. 시작하자: from scapy.all import * import psutil from collections import defaultdict import os from threading import Thread import pandas as pd # get the all network adapter's MAC addresses all_macs = {iface.mac for iface in ifaces.values()} # A dictionary to map each connection to its correponding process ID (PID) connection2pid = {} # A dictionary to map each process ID (PID) to total Upload (0) and Download (1) traffic pid2traffic = defaultdict(lambda: [0, 0]) # the global Pandas DataFrame that's used to track previous traffic stats global_df = None # global boolean for status of the program is_program_running = True def get_size(bytes): """ Returns size of bytes in a nice format """ for unit in ['', 'K', 'M', 'G', 'T', 'P']: if bytes < 1024: return f"{bytes:.2f}{unit}B" bytes /= 1024 필요한 라이브러리를 가져온 후 다음 함수에서 사용할 전역 변수를 초기화합니다. all_macs 우리 머신에 있는 모든 네트워크 인터페이스의 MAC 주소를 포함하는 Python 세트입니다. 우리 머신에 있는 모든 네트워크 인터페이스의 MAC 주소를 포함하는 Python 세트입니다. connection2pid 각 연결을 매핑하는 Python 사전입니다(TCP/UDP 계층에서 소스 및 대상 포트로 표시됨). 각 연결을 매핑하는 Python 사전입니다(TCP/UDP 계층에서 소스 및 대상 포트로 표시됨). pid2traffic 각 프로세스 ID(PID)를 업로드 및 다운로드 트래픽을 나타내는 두 값 목록에 매핑하는 또 다른 사전입니다. 각 프로세스 ID(PID)를 업로드 및 다운로드 트래픽을 나타내는 두 값 목록에 매핑하는 또 다른 사전입니다. global_df 이전 트래픽 데이터를 저장하는 데 사용되는 Pandas 데이터 프레임입니다(사용을 계산할 수 있도록). 이전 트래픽 데이터를 저장하는 데 사용되는 Pandas 데이터 프레임입니다(사용을 계산할 수 있도록). is_program_runningFalse 로 설정 하면 프로그램이 중지되고 종료 되는 단순히 부울입니다 . Scapy에 익숙하지 않은 경우 패킷을 스니핑하려면 sniff() 이 라이브러리에서 제공하는 기능을 사용해야 합니다. 이 함수는 여러 매개변수를 허용하며 중요한 매개변수 중 하나는 패킷이 캡처될 때마다 호출되는 콜백입니다. 를 호출하기 전에 sniff() 콜백을 만들어 보겠습니다. def process_packet(packet): global pid2traffic try: # get the packet source & destination IP addresses and ports packet_connection = (packet.sport, packet.dport) except (AttributeError, IndexError): # sometimes the packet does not have TCP/UDP layers, we just ignore these packets pass else: # get the PID responsible for this connection from our `connection2pid` global dictionary packet_pid = connection2pid.get(packet_connection) if packet_pid: if packet.src in all_macs: # the source MAC address of the packet is our MAC address # so it's an outgoing packet, meaning it's upload pid2traffic[packet_pid][0] += len(packet) else: # incoming packet, download pid2traffic[packet_pid][1] += len(packet) 콜백 은 process_packet() 패킷을 인수로 받아들입니다. 패킷에 TCP 또는 UDP 계층이 있는 경우 소스 및 대상 포트를 추출하고 connection2pid 사전을 사용하여 이 연결을 담당하는 PID를 얻으려고 시도합니다. 발견하고 소스 MAC 주소가 머신의 MAC 주소 중 하나인 경우 업로드 트래픽에 패킷 크기를 추가합니다. 그렇지 않으면 다운로드 트래픽에 추가됩니다. 다음으로 연결을 가져오는 역할을 하는 함수를 만들어 보겠습니다. def get_connections(): """A function that keeps listening for connections on this machine and adds them to `connection2pid` global variable""" global connection2pid while is_program_running: # using psutil, we can grab each connection's source and destination ports # and their process ID for c in psutil.net_connections(): if c.laddr and c.raddr and c.pid: # if local address, remote address and PID are in the connection # add them to our global dictionary connection2pid[(c.laddr.port, c.raddr.port)] = c.pid connection2pid[(c.raddr.port, c.laddr.port)] = c.pid # sleep for a second, feel free to adjust this time.sleep(1) connection2pid 위의 함수는 함수 에서 사용되는 전역 변수 를 채우는 역할을 하는 process_packet() 함수입니다. 물론 연결은 언제든지 이루어질 수 있으므로 루프에서 1초 정도 연결을 계속 수신 대기합니다. 다음으로 네트워크 사용량을 계산하고 수집된 데이터를 인쇄하는 함수를 작성합니다. def print_pid2traffic(): global global_df # initialize the list of processes processes = [] for pid, traffic in pid2traffic.items(): # `pid` is an integer that represents the process ID # `traffic` is a list of two values: total Upload and Download size in bytes try: # get the process object from psutil p = psutil.Process(pid) except psutil.NoSuchProcess: # if process is not found, simply continue to the next PID for now continue # get the name of the process, such as chrome.exe, etc. name = p.name() # get the time the process was spawned try: create_time = datetime.fromtimestamp(p.create_time()) except OSError: # system processes, using boot time instead create_time = datetime.fromtimestamp(psutil.boot_time()) # construct our dictionary that stores process info process = { "pid": pid, "name": name, "create_time": create_time, "Upload": traffic[0], "Download": traffic[1], } try: # calculate the upload and download speeds by simply subtracting the old stats from the new stats process["Upload Speed"] = traffic[0] - global_df.at[pid, "Upload"] process["Download Speed"] = traffic[1] - global_df.at[pid, "Download"] except (KeyError, AttributeError): # If it's the first time running this function, then the speed is the current traffic # You can think of it as if old traffic is 0 process["Upload Speed"] = traffic[0] process["Download Speed"] = traffic[1] # append the process to our processes list processes.append(process) # construct our Pandas DataFrame df = pd.DataFrame(processes) try: # set the PID as the index of the dataframe df = df.set_index("pid") # sort by column, feel free to edit this column df.sort_values("Download", inplace=True, ascending=False) except KeyError as e: # when dataframe is empty pass # make another copy of the dataframe just for fancy printing printing_df = df.copy() try: # apply the function get_size to scale the stats like '532.6KB/s', etc. printing_df["Download"] = printing_df["Download"].apply(get_size) printing_df["Upload"] = printing_df["Upload"].apply(get_size) printing_df["Download Speed"] = printing_df["Download Speed"].apply(get_size).apply(lambda s: f"{s}/s") printing_df["Upload Speed"] = printing_df["Upload Speed"].apply(get_size).apply(lambda s: f"{s}/s") except KeyError as e: # when dataframe is empty again pass # clear the screen based on your OS os.system("cls") if "nt" in os.name else os.system("clear") # print our dataframe print(printing_df.to_string()) # update the global df to our dataframe global_df = df 위의 함수는 사전을 반복하고 pid2traffic 를 사용하여 프로세스 개체를 얻으려고 시도 하므로 및 메서드 psutil 를 사용하여 프로세스의 이름과 생성 시간을 각각 가져올 수 있습니다. name()create_time() process 총 사용량을 포함하여 프로세스에 대해 필요한 대부분의 정보가 포함된 사전을 만든 후 global_df 이전 총 사용량을 얻은 다음 이를 사용하여 현재 업로드 및 다운로드 속도를 계산하는 데 사용합니다. 그런 다음 이것을 목록에 추가하고 데이터 프레임으로 변환 process 하여 인쇄합니다. processespandas 데이터 프레임을 인쇄하기 전에 "Download" 용도별 로 정렬하는 것과 같은 몇 가지 수정 작업을 수행할 수 get_size() 있으며 확장 가능한 멋진 형식으로 바이트를 인쇄하는 유틸리티 기능도 적용할 수 있습니다. 매초 위의 함수를 호출하는 또 다른 함수를 만들어 보겠습니다. def print_stats(): """Simple function that keeps printing the stats""" while is_program_running: time.sleep(1) print_pid2traffic() 이제 별도의 스레드에서 계속 실행되는 두 개의 함수가 있습니다. 하나는 위 print_stats() 이고 두 번째는 get_connections() . 메인 코드를 만들어 봅시다. if __name__ == "__main__": # start the printing thread printing_thread = Thread(target=print_stats) printing_thread.start() # start the get_connections() function to update the current connections of this machine connections_thread = Thread(target=get_connections) connections_thread.start() 마지막으로 Scapy의 sniff() 기능을 사용하여 스니핑을 시작하겠습니다. # start sniffing print("Started sniffing") sniff(prn=process_packet, store=False) # setting the global variable to False to exit the program is_program_running = False 이전에 정의한 process_packet() 함수를 prn 인수에 전달하고 로 설정 store 하여 False 캡처된 패킷을 메모리에 저장하지 않도록 합니다. 어떤 이유에서든(누르는 것을 포함하여) 함수를 종료할 때마다 로 설정 is_program_running 하기 만 하면 됩니다. 이제 프로그램을 실행해 보겠습니다. Falsesniff()CTRL+C $ python network_usage_per_process.py 출력은 다음과 같습니다. 참고: 이 코드에는 문제와 버그가 포함될 수 있으며 문제를 발견하면 자유롭게 의견을 제시하거나 변경 사항을 제안할 수 있습니다. 결론 UPDATE_DELAY 훌륭합니다. 이제 네트워크 사용을 모니터링하기 위한 세 가지 프로그램이 있습니다. 정렬 열 업데이트 또는 변경 등과 같이 원하는 대로 코드를 자유롭게 편집하고 사용할 수 있습니다. 또한 , 프로세스 모니터 psutil 를 만들 거나 컴퓨터의 다양한 시스템 및 하드웨어 정보를 추출 할 수 있는 작업이 많이 있습니다 . 방법이 궁금한 경우 자습서를 확인하십시오. 여기 에서 세 가지 프로그램에 대한 전체 코드를 얻으십시오 . https://www.thepythoncode.com 의 원본 기사 출처 #python
키워드에 대한 정보 파이썬 실시간 모니터링
다음은 Bing에서 파이썬 실시간 모니터링 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 실시간으로 최신 데이터를 불러오는 Websocket API, REST API와 어떤 차이가 있을까?
- API
- Websocket API
- REST API
실시간으로 #최신 #데이터를 #불러오는 #Websocket #API, #REST #API와 #어떤 #차이가 #있을까?
YouTube에서 파이썬 실시간 모니터링 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 실시간으로 최신 데이터를 불러오는 Websocket API, REST API와 어떤 차이가 있을까? | 파이썬 실시간 모니터링, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.