There have been multiple accounts created with the sole purpose of posting advertisement posts or replies containing unsolicited advertising.

Accounts which solely post advertisements, or persistently post them may be terminated.

fraichu ,

Not sure, but I think that designing an internet measurement in a RIPE Atlas network might just fit this task? atlas.ripe.net/probes/You have micro cuts, but are those only to the big name websites or to something local as well? Might help answer that, and give ISP data on where exactly are they hitting the bottleneck and what are they missing monitoring.

the_thunder_god , (edited )
@the_thunder_god@kbin.social avatar

For a while now I've had Grafana hooked up to InfluxDB and Telegraf. Using Telegraf I setup pings to ips along my route to the larger internet, major dns providers, and several large internet sites. I measure response time and packet loss. It has allowed me to cut through the Comcast BS when diagnosing problems with them. I can tell them for sure that the problem is inside their network and is the X hop from my router.

I recently started setting up Grafana over on a different server and I'm using Prometheus instead to monitor more than just the other server I was monitoring. I haven't yet set it up with that but it looks like something similar is possible with Prometheus based on the small amount of research I've done on it.

paulchartres ,

I use Uptime Kuma as mentioned in another comment, but also Speedtest Tracker which makes automated speed tests at the interval of your choice and displays them in a coherent dashboard. It’s pretty neat and it did help me figure out a few things about my network.

133arc585 ,
@133arc585@lemmy.ml avatar

Depends on how much you want to set up. For my purposes, I just check for connectivity every minute, and record true or false as a new row in a sqlite database if there is connectivity.

This is what I use on my raspberry pi,

<pre style="background-color:#ffffff;">
<span style="font-style:italic;color:#969896;">#!/usr/bin/env python3
</span><span style="font-weight:bold;color:#a71d5d;">from </span><span style="color:#323232;">datetime </span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">datetime
</span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">sqlite3
</span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">socket
</span><span style="font-weight:bold;color:#a71d5d;">from </span><span style="color:#323232;">pathlib </span><span style="font-weight:bold;color:#a71d5d;">import </span><span style="color:#323232;">Path
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">try</span><span style="color:#323232;">:
</span><span style="color:#323232;">    host </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">socket.gethostbyname(</span><span style="color:#183691;">"one.one.one.one"</span><span style="color:#323232;">)
</span><span style="color:#323232;">    s </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">socket.create_connection((host, </span><span style="color:#0086b3;">80</span><span style="color:#323232;">), </span><span style="color:#0086b3;">2</span><span style="color:#323232;">)
</span><span style="color:#323232;">    s.close()
</span><span style="color:#323232;">    connected </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">True
</span><span style="font-weight:bold;color:#a71d5d;">except</span><span style="color:#323232;">:
</span><span style="color:#323232;">    connected </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">False
</span><span style="color:#323232;">timestamp </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">datetime.now().isoformat()
</span><span style="color:#323232;">
</span><span style="color:#323232;">db_file </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">Path(__file__).resolve().parent </span><span style="font-weight:bold;color:#a71d5d;">/ </span><span style="color:#183691;">'Database.sqlite3'
</span><span style="color:#323232;">conn </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">sqlite3.connect(db_file)
</span><span style="color:#323232;">curs </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">conn.cursor()
</span><span style="color:#323232;">curs.execute(</span><span style="color:#183691;">'''</span><span style="font-weight:bold;color:#a71d5d;">CREATE TABLE </span><span style="font-weight:bold;color:#323232;">IF</span><span style="color:#183691;"> NOT EXISTS checks (id </span><span style="font-weight:bold;color:#a71d5d;">INTEGER PRIMARY KEY</span><span style="color:#183691;"> AUTOINCREMENT, </span><span style="font-weight:bold;color:#a71d5d;">timestamp TEXT</span><span style="color:#183691;">, connected </span><span style="font-weight:bold;color:#a71d5d;">INTEGER</span><span style="color:#183691;">)</span><span style="font-weight:bold;color:#a71d5d;">>
</span><span style="color:#0086b3;">curs</span><span style="color:#183691;">.</span><span style="color:#0086b3;">execute</span><span style="color:#183691;">('''</span><span style="color:#0086b3;">INSERT INTO </span><span style="color:#323232;">checks (timestamp, connected) VALUES (?, ?);</span><span style="color:#183691;">''', (timestamp, 1 if connected else 0))
</span><span style="color:#183691;">conn.commit()
</span><span style="color:#183691;">conn.close()
</span>

and I just have a crontab entry * * * * * ~/connectivity_check/check.py >/dev/null 2>&1 to run it every minute.

Then I just check for recent disconnects via:

<pre style="background-color:#ffffff;">
<span style="color:#323232;">$ sqlite3 ./connectivity_check/Database.sqlite3 </span><span style="color:#183691;">'select count(*) from checks where connected = 0 order by timestamp desc;'
</span>

Obviously, it’s not as full-featured as something with configurable options or a web UI etc, but for my purposes, it does exactly what I need with absolutely zero overhead.

Tiritibambix OP ,
@Tiritibambix@lemmy.ml avatar

That’s not exactly the solution I was looking for, but that was very instructive. Thank you.

133arc585 ,
@133arc585@lemmy.ml avatar

Ah I see you mentioned the cuts are only a few seconds long. This wouldn’t catch that very well.

If you have a server outside of your network you could simply hold open a TCP connection and report when it breaks, but I’ll admit at that point it’s outside of what I’ve had to deal with.

Catsrules ,
Tiritibambix OP ,
@Tiritibambix@lemmy.ml avatar

I’ll try it, thank you.

mj1003 ,

I’m curious to see what others use, but I’ve been using Uptime Kuma for this purpose at several different sites I manage. I run Uptime Kuma on a VPS and locally on site. I have the local instance monitoring the router, gateway, DNS, and several other internal and external devices. I also have the local instance do a “push” check-in on my VPS instance. This gives me a pretty holistic view of things.

Tiritibambix OP ,
@Tiritibambix@lemmy.ml avatar

Interesting. Might try that. Thank you.

planish ,

You might be looking for a “smoke test”?

How micro are the cuts? You might get pretty far with the “ping” tool without any fancy monitoring setup around it.

Tiritibambix OP ,
@Tiritibambix@lemmy.ml avatar

I’ll take a look at smoke test. Thanks. The cuts are only a few seconds long.

poVoq ,
@poVoq@slrpnk.net avatar

Might also be a DNS server issue. Try configuring a non-ISP one in your network settings and see if that helps.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • random
  • [email protected]
  • lifeLocal
  • goranko
  • All magazines