Thanks a lot juliu...@ @ Brian Candler for valuable answer and time. Let me 
go through 

Thanks once again.

Thanks
DV

On Saturday, June 4, 2022 at 5:32:33 PM UTC+5:30 Brian Candler wrote:

> There are a variety of tools for this:
>
> - tools which capture packets on the interface and classify them into 
> their own format: e.g. packetbeat 
> <https://www.elastic.co/beats/packetbeat>, SiLK 
> <https://tools.netsa.cert.org/silk/> + flowviewer <http://flowviewer.net/>, 
> pmacct <http://www.pmacct.net/>, NTOPng 
> <https://www.ntop.org/products/traffic-analysis/ntop/> [some features of 
> the latter are commercial only]
>
> - tools which capture packets on the interface and turn them into standard 
> Netflow/IPFIX records: e.g. softflowd <https://github.com/irino/softflowd>, 
> goflow <https://github.com/cloudflare/goflow>
>     => you then also need something which stores and queries these flow 
> records, e.g. elastiflow <https://github.com/robcowart/elastiflow>, nfdump 
> <https://github.com/phaag/nfdump>/nfsen <http://nfsen.sourceforge.net/>
>
> - IDS tools which perform deeper packet analysis, e.g. zeek (formerly bro 
> <https://bricata.com/blog/bro-ids-renames-zeek-ids/>)
>
> - or you can just capture raw packets on the wire using tcpdump/wireshark 
> and analyse them later, e.g. with packetq 
> <https://www.dns-oarc.net/tools/packetq>
>
> Most of these don't work directly with prometheus, because of the high 
> cardinality issue that Julius highlighted.  You will need a proper log 
> storage backend like elasticsearch or loki.
>
> However, I have managed to get one of them to work in a 
> prometheus-exporter type of way, and that's pmacct.  This could be useful 
> if you can pre-define the ranges of addresses that you want to expose, so 
> that you have limited cardinality.
>
> To make this work I used exporter_exporter 
> <https://github.com/QubitProducts/exporter_exporter> to run a small bit 
> of python code (included below) to query pmacct's own in-RAM counter 
> store.  pmacct is configured to aggregate non-local source and destination 
> addresses. With this configuration, the results you get look like this:
>
> # TYPE flow_bytes untyped
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:8fa::2",aggregate="inbound"} 
> 7695
> flow_bytes{net_src="0.0.0.0",ip_dst="10.12.255.33",aggregate="inbound"} 566
> flow_bytes{net_src="0.0.0.0",ip_dst="10.12.255.1",aggregate="inbound"} 
> 581964
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:800::1",aggregate="inbound"} 
> 10883
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:8ff::32",aggregate="inbound"} 
> 1300
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:8f9::4",aggregate="inbound"} 
> 2138
> flow_bytes{net_src="0.0.0.0",ip_dst="192.0.2.234",aggregate="inbound"} 530
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:8ff::58",aggregate="inbound"} 
> 912
> flow_bytes{net_src="0.0.0.0",ip_dst="10.12.255.47",aggregate="inbound"} 84
> flow_bytes{net_src="0.0.0.0",ip_dst="192.0.2.233",aggregate="inbound"} 
> 12084
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:8ff::33",aggregate="inbound"} 
> 107517
> flow_bytes{net_src="::",ip_dst="2001:db8:1234:800:e809:5c7e:b33c:4f48",aggregate="inbound"}
>  
> 1796
> flow_bytes{ip_src="10.12.255.31",net_dst="0.0.0.0",aggregate="outbound"} 
> 1981
> flow_bytes{ip_src="2001:db8:1234:8ff::58",net_dst="::",aggregate="outbound"} 
> 904
> flow_bytes{ip_src="10.12.255.56",net_dst="0.0.0.0",aggregate="outbound"} 52
> flow_bytes{ip_src="2001:db8:1234:8fa::2",net_dst="::",aggregate="outbound"} 
> 43842
> flow_bytes{ip_src="2001:db8:1234:800::1",net_dst="::",aggregate="outbound"} 
> 63675
> flow_bytes{ip_src="10.12.255.254",net_dst="0.0.0.0",aggregate="outbound"} 
> 209
> flow_bytes{ip_src="2001:db8:1234:8ff::33",net_dst="::",aggregate="outbound"} 
> 18578
> flow_bytes{ip_src="2001:db8:1234:800:e809:5c7e:b33c:4f48",net_dst="::",aggregate="outbound"}
>  
> 1709
> flow_bytes{ip_src="10.12.0.100",net_dst="0.0.0.0",aggregate="outbound"} 
> 4250
> flow_bytes{ip_src="10.12.255.33",net_dst="0.0.0.0",aggregate="outbound"} 
> 2887
> flow_bytes{ip_src="192.0.2.234",net_dst="0.0.0.0",aggregate="outbound"} 566
> flow_bytes{ip_src="10.12.255.1",net_dst="0.0.0.0",aggregate="outbound"} 84
> flow_bytes{ip_src="2001:db8:1234:8f9::4",net_dst="::",aggregate="outbound"} 
> 2140
> flow_bytes{ip_src="2001:db8:1234:8ff::32",net_dst="::",aggregate="outbound"} 
> 1298
> flow_bytes{ip_src="10.12.255.47",net_dst="0.0.0.0",aggregate="outbound"} 
> 581964
>
> That is: for "inbound" traffic, the individual destination addresses are 
> shown, and the source is always 0.0.0.0 or :: (i.e. "the Intenet"), 
> aggregated together.  For "outbound" traffic, the destination is always 
> 0.0.0.0 or ::, and individual source IP addresses are shown. It lets you 
> answer questions like "which devices on my local network are sending (or 
> receiving) the most traffic?", and the cardinality is limited by the number 
> of active local IPs you have.  But it won't answer questions like "where on 
> the Internet is my outbound traffic going?"; that's too high cardinality 
> for Prometheus.
>
> The configs to achieve this are below.  Note: I was using nfacctd to 
> receive Netflow records generated by my router.  If you want to sniff 
> packets going through a Linux server interface, then you'll need to run 
> pmacctd instead of nfacctd.  More info here 
> <https://github.com/pmacct/pmacct/blob/master/QUICKSTART>. 
>
>
>
> *# On pmacct server## /etc/pmacct/nfacctd.conf*
>
> nfacctd_port: 2055
> plugins: memory[inbound], memory[outbound]
>
> imt_path[inbound]: /tmp/inbound.pipe
> aggregate_filter[inbound]: dst net 10.0.0.0/8 or dst net 192.0.2.232/30 
> or dst net 2001:db8:1234::/56
> aggregate[inbound]: dst_host
> imt_mem_pools_number[inbound]: 64
> imt_mem_pools_size[inbound]: 65536
>
> imt_path[outbound]: /tmp/outbound.pipe
> aggregate_filter[outbound]: src net 10.0.0.0/8 or src net 192.0.2.232/30 
> or src net 2001:db8:1234::/56
> aggregate[outbound]: src_host
> imt_mem_pools_number[outbound]: 64
> imt_mem_pools_size[outbound]: 65536
>
> *## /etc/systemd/system/nfacct.service*
>
> [Unit]
> Description=nfacctd
> Documentation=https://github.com/pmacct/pmacct/wiki
> After=network-online.target
>
> [Service]
> User=nobody
> Group=nogroup
> ExecStart=/usr/sbin/nfacctd -f /etc/pmacct/nfacctd.conf
> Restart=on-failure
> RestartSec=5
>
> [Install]
> WantedBy=multi-user.target
>
> *## /etc/prometheus/expexp.yaml*
>
> modules:
>   pmacct:
>     method: exec
>     timeout: 5s
>     exec:
>       command: /usr/local/bin/pmacct.py
>
> *## /etc/systemd/system/exporter_exporter.service*
>
> [Unit]
> Description=Prometheus exporter proxy
> Documentation=https://github.com/QubitProducts/exporter_exporter
> After=network-online.target
>
> [Service]
> User=nobody
> Group=nogroup
> ExecStart=/usr/local/bin/exporter_exporter -config.file 
> /etc/prometheus/expexp.yaml
> Restart=on-failure
> RestartSec=5
>
> [Install]
> WantedBy=multi-user.target
>
> *## /usr/local/bin/pmacct.py*
>
> #!/usr/bin/python3
>
> import json
> import subprocess
>
> LABELS={}   # add any static labels here, eg hostname
>
> def export(metric, labels, value):
>     lstr = ",".join(("%s=\"%s\"" % (k,v) for k,v in labels.items()))
>     print("%s{%s} %d" % (metric, lstr, value))
>
> for aggregate in ["inbound", "outbound"]:
>     res = subprocess.run(["pmacct", "-s", "-p", "/tmp/%s.pipe" % 
> aggregate, "-O", "json"],
>            stdout=subprocess.PIPE)
>     if res.returncode:
>         print(res.stdout)
>         res.check_returncode()
>     for line in res.stdout.splitlines():
>         data = json.loads(line)
>         b = data.pop("bytes")
>         p = data.pop("packets")
>         data.update(LABELS)
>         data["aggregate"] = aggregate
>         export("flow_bytes", data, b)
>         export("flow_packets", data, p)
>
> *## Test*
>
> curl localhost:9999/proxy?module=pmacct
>
> *# On prometheus server*
>
>   - job_name: pmacct
>     scrape_interval: 1m
>     metrics_path: /proxy
>     params:
>       module: [pmacct]
>     static_configs:
>       - targets:
>         - pmacct.example.net:9999
>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/0644a9d6-db46-489d-a06c-e70250121d6cn%40googlegroups.com.

Reply via email to