Grafana + InfluxDB로 패킷 흐름 그래프
네트워크는 이런 느낌
Internet -----------+
|
[Gateway Router]
ここを監視----> ||
[L2SW (NetGear GS108E)]
| |
--+------+ +---------+
| | |
[監視ポート] [無線AP] [有線LAN]
라우터에 직접 연결된 L2 스위치로 라우터의 포트를 미러링하여 캡처 용 포트를 작성하고 그 포트를 Raw Socket으로 모니터링하고 있습니다.
로 각각 그래프로하고 있습니다.
엄밀하게 Upload/Download 를 낼 필요가 있는 경우는 snmp 등을 사용해 인터페이스의 패킷 카운터를 취득하는 편이 확실합니다.
MAC 주소를 취득하고 있으므로 MAC 마다 얼마나 통신하고 있는지를 확인할 수 있습니다.
여기도 대상 MAC, 소스 MAC로 구분하여 Upload/Download를 낼 수 있습니다
Grafana 그래프는 그래프 아래에 있는 분류명을 선택하면 개별 그래프를 표시할 수 있습니다.
준비
1. Ubuntu에 필요한 패키지를 설치합니다.
sudo apt install influxdb grafana libevent-dev
InfluxDB는 tag가 지원되어야 하므로 0.9 이상이 필요합니다.
//tag를 사용하지 않으면 쓸 형식이 좋지 않기 때문에 그대로 쓰면 의도하지 않은 값이 쓰여지는 것 같습니다.
2. 미러링 포트를 모니터링하여 MAC 주소별로 계산할 수 있는 데몬을 준비합니다.
% sudo pktcaptd
% sudo pktcaptdctl dump
{
"interface" : "enp13s0f0",
"flows" : [
{
"count":276,
"size" :107596,
"src_mac" : "00:E0:4D:10:8C:0C",
"dst_mac" : "DC:53:60:03:DD:4C",
"src_ip4" : "192.168.1.100",
"dst_ip4" : "192.168.0.38",
"l4proto" : "tcp",
"src_port" : 22,
"dst_port" : 59144
},
{
"count":390,
"size" :34856,
"src_mac" : "DC:53:60:03:DD:4C",
"dst_mac" : "00:E0:4D:10:8C:0C",
"src_ip4" : "192.168.0.38",
"dst_ip4" : "192.168.1.100",
"l4proto" : "tcp",
"src_port" : 59144,
"dst_port" : 22
}
],
"total_flow" : 60
}
UNIX 도메인 소켓에 커멘드를 기입하면(자) JSON 형식으로 출력되므로 그것을 그대로 Ruby 로 처리할 수도 있습니다
3. InfluxDB 설정
ぃ tp // 코 m / 아이 r과 ぃ / / ms / 806 0 bfb, c 115b3
참고로 패킷 흐름 JSON을 저장하는 데이터베이스를 제공합니다.
4. InfluxDB에 JSON을 입력
Ruby를 사용하여 JSON을 읽고 InfluxDB에 씁니다.
Ruby에서 InfluxDB 데이터베이스를 만지기 위해 influxdb-ruby 모듈을 설치하십시오.
sudo gem install influxdb
influxdb-ruby 사용법
require 'influxdb'
DBNAME ='pktcaptd0' #XXX set database name
DBSERVER="127.0.0.1" #XXX set database server address (default: localhost)
USERNAME="pktcaptd0" #XXX set user name of the database
PASSWORD="pktcaptd0" #XXX set password of the database
auth = {
:username => USERNAME,
:password => PASSWORD,
:host => DBSERVER,
:port => 8086,
:time_precision => "s"
}
influxdb = InfluxDB::Client.new(DBNAME, auth)
values={:point_1 => 100, :point2 => 200}
tags={:type => "dummy"}
data={:values=values, :tags=tags}
influxdb.write_point('mesurement', data)
pktcaptd에서 influxdb로 데이터를 쓰는 스크립트 가 있기 때문에 이것을 cron 등으로 정기적으로 실행한다.
데이터가 기록되었는지 여부는 InfluxDB에 직접 액세스하여 확인합니다.
직접 액세스 할 때 기본값은 8083 포트에 http로 액세스
CentOS + InfluxDB v1.11의 조합으로 8083은 기본적으로 사용할 수 없으므로
/etc/influxdb/influxdb.conf를보고 8083에서 검색을 수행하고 근처에있는 enabled를 true로 설정하십시오.
[admin]
enabled = true
bind-address = ":8083"
액세스하면 오른쪽 상단의 데이터베이스를 작성한 데이터베이스 이름으로 변경하십시오.
select * from 'mesurement'
에서 검색
검색 결과를 좁히려면 where 사용
select * from 'mesurement' where src_ip4 = '192.168.1.100' and dst_ip4 = '192.168.0.38'
시간으로 좁히고 싶을 때는 time 변수를 사용할 수 있다
select * from 'mesurement' where time > '2017/01/01' and time < '2017/01/05'
4. Grafana로 표시
환경에 따라서는 아이콘이 보이지 않는 일이 있기 때문에 마음의 눈으로 커서를 움직여 포인터가 바뀐 부분에서 클릭한다
Reference
이 문제에 관하여(Grafana + InfluxDB로 패킷 흐름 그래프), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s-ymgch228/items/7865ca9a0958d773b266텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)