diff --git a/etc/anubis/botPolicy.yaml b/etc/anubis/botPolicy.yaml index fbe4bcb..c9b9f4b 100644 --- a/etc/anubis/botPolicy.yaml +++ b/etc/anubis/botPolicy.yaml @@ -1,4 +1,37 @@ bots: + # For testing + - name: test-anubis + user_agent_regex: >- + AnubisTest + #action: DENY + action: WEIGH + weight: + adjust: 30 + + # This allows local services on your server (change the public ip below) to bypass anubis + - name: localhost + action: ALLOW + remote_addresses: + - 62.182.81.28/32 + - 2a09:2dc0:0:100::1/64 + - 192.42.0.0/16 + + - name: custom-whitelist + action: ALLOW + user_agent_regex: >- + yacybot|Lynx|Mastodon|OPR|Clipious + + - name: uptime + action: ALLOW + user_agent_regex: >- + updown.io|UptimeRobot + + # Proactively deny all apps, scripts, etc where the devs didnt even properly change the default ua to something valid, so they can just fuck off imo + - name: lazy-user-agents + action: DENY + user_agent_regex: >- + libwww-perl|RED|RPT-HTTPClient|sfFeedReader|python-requests|Python-urllib|Ruby|node-fetch|http\.rb|WinHttp\.WinHttpRequest|Java|Apache-HttpClient|keycdn-tools|Go-http-client|PHP|reqwest|HTTPoison|http-client|Dart|AsyncHttpClient + # Pathological bots to deny - import: (data)/bots/_deny-pathological.yaml - import: (data)/bots/aggressive-brazilian-scrapers.yaml @@ -17,51 +50,44 @@ bots: # - Marginalia # - Mojeek - import: (data)/crawlers/_allow-good.yaml - + # Challenge Firefox AI previews - import: (data)/clients/x-firefox-ai.yaml # Allow common "keeping the internet working" routes (well-known, favicon, robots.txt) - import: (data)/common/keep-internet-working.yaml - # # Punish any bot with "bot" in the user-agent string - # # This is known to have a high false-positive rate, use at your own risk - # - name: generic-bot-catchall - # user_agent_regex: (?i:bot|crawler) - # action: CHALLENGE - # challenge: - # difficulty: 16 # impossible - # report_as: 4 # lie to the operator - # algorithm: slow # intentionally waste CPU cycles and time + # Block abusive actors and bots + - name: abusive-actors + action: DENY + user_agent_regex: >- + 01h4x\.com|360Spider|404checker|404enemy|80legs|ADmantX|AIBOT|ALittleClient|Alexa|Alexibot|AllSubmitter|Alligator|AlphaBot|Amazonbot|Anthill|Anthropic-ai|Anarchie|Anarchy|Anarchy99|Ankit|Apexoo|Aspiegel|Asterias|Atomseobot|Attach|AwarioBot|AwarioRssBot|AwarioSmartBot|BBBike|BDCbot|BDFetch|BLEXBot|BackDoorBot|BackStreet|BackWeb|Backlink-Ceck|BacklinkCrawler|Backlink-check|BacklinksExtendedBot|Badass|Bandit|Barkrowler|BatchFTP|BattleztarBazinga|BetaBot|Bigfoot|Bitacle|BlackHole|BlackWidow|Blackboard|Blow|BlowFish|Blazer|Boardreader|Bolt|BotALot|Brandprotect|Brandwatch|Buck|Buddy|BuiltBotTough|BuiltWith|Bullseye|BunnySlippers|BuzzSumo|Bytespider|BUbiNG|CATExplorador|CCBot|Chrome\ Privacy\ Preserving\ Prefetch\ Proxy|CODE87|CSHttp|Calculon|Cah\.io\.community|CazoodleBot|Cegbfeieh|CensysInspect|ChatGPT-User|CheTeam|CheeseBot|CherryPicker|ChinaClaw|Chlooe|Citoid|Claritybot|Clark-crawler|Cliqzbot|Cloudmapping|Cocolyzebot|Coccocbot|Cognitiveseo|Coher-ai|Collector|Com\.plumanalytics|Copier|CopyRightCheck|Copyscape|Cosmos|Craftbot|Crawl\.sogou\.com|Crawler\.feedback|Crawler4j|CrawlingatHomeProject|CrazyWebCrawler|Crescent|CrunchBot|Curious|Custo|CyberFind|CyotekWebCopy|DBLBot|DIIbot|DataCha0s|Dataforseo\.com|Dataforseobot|DatabaseDriverMysqli|Demon|Demandbase-bot|Deusu|Devil|Digincore|DigitalPebble|Dirbuster|Disco|Discobot|Discoverybot|Dispatch|DittoSpyder|DnBCrawler-Analytics|DnyzBot|DomCopBot|DomainAppender|DomainCrawler|DomainSigmaCrawler|DomainStatsBot|DomainsProject|Dotbot|DownloadWonder|Dragonfly|Drip|Ecatch|ECCP/1\.0|EMailSiphon|EMailWolf|EasyDL|Ebingbong|Ecxi|EirGrabber|EroCrawler|Evil|Ev-crawler|Evc-batch|Exabot|Expanse|ExpressWebPictures|ExtLinksBot|Extractor|ExtractorPro|ExtremePictureFinder|EyeNetIE|Ezooms|FDM|FHscan|FacebookBot|facebookexternalhit|Facebookplatform|Facebookscraper|FemtosearchBot|Fimap|Firefox/7\.0|FlashGet|Flunky|Foobot|Freeuploader|FrontPage|Fuzz|FyberSpider|Fyrebot|G-i-g-a-b-o-t|GPTBot|GRFZbot|GT::WWW|GalaxyBot|GeedoProductSearch|Genieo|GermCrawler|GetRight|GetWeb|Getintent|Gigabot|Go!Zilla|Go-Ahead-Got-It|GoZilla|Gotit|GrabNet|Grabber|Grafula|GrapeFX|GrapeshotCrawler|GridBot|Gopher|Haansoft|HaosouSpider|Harvest|Havij|Heritrix|Hloader|HonoluluBot|Humanlinks|HybridBot|IDBTE4M|IDBot|IRLbot|Iblog|Id-search|IlseBot|ImageFetch|ImagesiftBot|Imagesift\.com|IndeedBot|IndyLibrary|InfoNaviRobot|InfoTekies|InformationSecurityTeamInfraSecScanner|InfraSecScanner|Instabid|Intelliseek|InterGET|InternetMeasurement|InternetNinja|InternetSeer|InternetVista\ monitor|Iria|Iskanie|Isitwp\.com|IstellaBot|Iubenda-radar|JOCWebSpider|JamesBOT|Jbrofuzz|JennyBot|JetCar|Jetty|JikeSpider|Joomla|Jorgee|JustView|Jyxobot|KenjinSpider|KeybotTranslation-Search-Machine|KeywordDensity|Kinza|Kozmosbot|LNSpiderguy|LWP::Simple|Lanshanbot|Larbin|Leap|LeechFTP|LeechGet|LexiBot|Lftp|LibWeb|Libwhisker|LieBaoFast|Lightspeedsystems|Likse|LinkedInBot|LinkScan|Linkdexbot|Linkfluence|LinkWalker|Linkbot|LinkextractorPro|LinkpadBot|LinksManager|LinqiaMetadataDownloaderBot|LinqiaRSSBot|LinqiaScrapeBot|Lipperhey|LipperheySpider|Litemage_walker|Lmspider|Ltx71|Mag-Net|Magnet|Mail\.RU_Bot|Majestic-SEO|Majestic12|MajesticSEO|Magpie-crawler|MarkMonitor|MarkWatch|MassDownloader|Masscan|MataHari|MauiBot|Mb2345Browser|MeanPathBot|Meanpathbot|Mediatoolkitbot|MegaIndex\.ru|Metauri|Mediawords|MicroMessenger|MicrosoftDataAccess|MicrosoftURLControl|Minefield|MisterPiX|MoblieSafari|Mojolicious|MolokaiBot|MorfeusFuckingScanner|Mozlila|Mr\.4x3|Msrabot|Muhstik-scan|Musobot|MOptimizer|NICErsPRO|NPbot|NameIntelligence|Nameprotect|Navroad|NearSite|Needle|Nessus|NetAnts|NetEstate\ NE\ Crawler|NetLyzer|NetMechanic|NetSpider|NetZIP|NetVampire|Netcraft|Nettrack|Netvibes|NextGenSearchBot|Nibbler|Niki-bot|Nikto|NimbleCrawler|Nimbostratus|Ninja|Nmap|Nuclei|Nutch|OBot|OfflineExplorer|OfflineNavigator|Odin|OMGili|OnCrawl|OpenAI|OpenAI\.com|OpenLinkProfiler|OpenVAS|Openfind|OrangeBot|OrangeSpider|OutclicksBot|OutfoxBot|PalmSource|Page\ Analyzer|PageGrabber|PageScorer|PageThing\.com|Pandalytics|Panscient|PapaFoto|Pavuk|PcBrowser|PeoplePal|Petalbot|Picscout|Picsearch|PictureFinder|Piepmatz|Pimonster|Pinterestbot|Pixray|PleaseCrawl|Pockey|Polaris\ version|Probe-image-size|ProPowerBot|ProWebWalker|Probethenet|Proximic|Psbot|Pu_iN|Pump|PxBroker|PyCurl|QueryNMetasearch|Quick-Crawler|Quora-Bot|Rainbot|RankActive|RankActiveLinkBot|RankFlex|RankingBot|RankingBot2|Rankivabot|RankurBot|Rere|ReGet|RealDownload|Reaper|RebelMouse|Recorder|RedesScrapy|RepoMonkey|Researchscan|Ripz|Ripper|RocketCrawler|Rogerbot|RSSingBot|S1z\.ru|SBIder|Scan\.lol|Scalaj-http|Seocompany\.store|Seoscanners|Seostar|Serpstatbot|Sexsearcher|SentiBot|SenutoBot|SeoCherryBot|SeoSiteCheckup|Seobility|SeobilityBot|Seomoz|Shodan|Siphon|Slack-ImgProxy|Slackbot|Slackbot-LinkExpanding|SlySearch|SmartDownload|Snake|Snapbot|Snoopy|SocialRankIOBot|Sociscraper|Sogouwebspider|Sogouspider|Sosospider|Sottopop|SpaceBison|Sp_auditbot|Spammen|SpankBot|Spanner|Spbot|Spider_Bot|Spider_Bot/3\.0|Spinn3r|SplitSignalBot|SputnikBot|Sqlmap|Sqlworm|Sqworm|Steeler|Stripper|Sucker|Sucuri|SummalyBot|SuperBot|SuperHTTP|Surfbot|SurdotlyBot|SurveyBot|Suzuran|Swiftbot|Szukacz|T0PHackTeam|T8Abot|TAkeOut|TelegramBot|Teleport|TeleportPro|Telesoft|Telesphoreo|Telesphorep|TheIntraformant|TheNomad|Thumbor|TightTwatBot|TinEye|TinyTestBot|Titan|Toata|Toweyabot|Tracemyfile|Trendiction|Trendictionbot|Trendiction\.com|Trendiction\.de|True_Robot|Turingos|Turnitin|TurnitinBot|TwengaBot|Twice|Twitterbot|Typhoeus|UBermetrics-technologies\.com|URLy\.Warning|URLyWarning|UnisterBot|Upflow|V-BOT|VBProject|VCI|Vacuum|Vagabondo|VelenPublicWebCrawler|VeriCiteCrawler|VidibleScraper|Virusdie|VoidEYE|Voil|Voltron|Voyagerx\.com|WASALive-Bot|WBSearchBot|WEBDAV|WISENutbot|WPScan|WWW-Collector-E|WWW-Mechanize|WWW::Mechanize|WWWOFFLE|Wallpapers|Wallpapers/3\.0|WallpapersHD|WeSEE|WebAuto|WebBandit|WebCollage|WebCopier|WebEnhancer|WebFetch|WebFuck|WebGains-bot|WebGoIS|WebImageCollector|WebLeacher|WebMeup-crawler|WebPix|WebPros\.com|WebProsbot|WebReaper|WebSauger|WebShag|WebStripper|WebSucker|WebVigil|WebWhacker|WebZIP|Webalta|WebmasterWorldForumBot|WebsiteExtractor|WebsiteQuester|Webster|Whack|Whacker|Whatweb|WhatsApp|Who\.isBot|Widow|WinHTTrack|WiseGuysRobot|Wonderbot|Woobot|Wotbox|Wprecon|X09Mozilla|X22Mozilla|XaldonWebSpider|Xaldon_WebSpider|Xenu|XPymep1\.exe|YaK|YoudaoBot|Zade|Zauba|Zauba\.io|Zermelo|Zeus|Zitebot|ZmEu|ZoomBot|ZoominfoBot|ZumBot|ZyBorg|zgrab|YandexAccessibilityBot|YandexCalendar|YandexDialogs|YandexDirect|YandexDirectDyn|YandexFavicons|YaDirectFetcher|YandexMobileBot|YandexMarket|YandexMetrika|YandexMobileScreenShotBot|YandexOntoDBAPI|YandexPartner|YandexRCA|YandexRenderResourcesBot|YandexSearchShop|YandexTracker|YandexUserproxy|YandexVideoParser|YandexScreenshotBot|YandexComBot|TikTok|Custom-AsyncHttpClient - # Generic browser catchall - # Mozilla is often used by bots that lie about their ua, so we need to weight it by 10 - - name: mozilla + # Catch all generic browsers + - name: generic-browser user_agent_regex: >- Mozilla|Opera action: WEIGH weight: adjust: 10 - - # Chrome headless may be used by modern bots, so we need to weigth it by 5 - - name: chromium - user_agent_regex: >- - Chrome|Chromium|Edge - action: WEIGH - weight: - adjust: 5 - - # Webkit Safari is never used by bots, so let it through - - name: webkit - user_agent_regex: >- - Safari - action: ALLOW + + # Catch the rest + #- name: catch-all + # expression: "true" + # action: WEIGH + # weight: + # adjust: 5 dnsbl: false openGraph: enabled: false +store: + backend: bbolt + parameters: + path: /data/db/anubis.bdb + # By default, send HTTP 200 back to clients that either get issued a challenge # or a denial. This seems weird, but this is load-bearing due to the fact that # the most aggressive scraper bots seem to really, really, want an HTTP 200 and @@ -84,7 +110,7 @@ status_codes: # See https://anubis.techaro.lol/docs/admin/configuration/thresholds for more # information. thresholds: - - name: minimal + - name: zero expression: weight <= 0 action: ALLOW @@ -95,10 +121,10 @@ thresholds: - weight < 10 action: CHALLENGE challenge: - algorithm: metarefresh - difficulty: 1 - report_as: 1 - + algorithm: fast + difficulty: 4 + report_as: 4 + - name: moderate expression: all: @@ -109,20 +135,23 @@ thresholds: algorithm: fast difficulty: 4 report_as: 4 - + - name: high - expression: weight >= 20 + expression: + all: + - weight >= 20 + - weight < 30 action: CHALLENGE challenge: algorithm: fast difficulty: 5 report_as: 5 + # Whoever ends up here needs to fucking choke on an impossible challenge - name: impossible expression: weight >= 30 action: CHALLENGE challenge: - algorithm: slow + algorithm: fast difficulty: 16 report_as: 4 - diff --git a/etc/grafana/dashboard.json b/etc/grafana/dashboard.json index 3cda1df..76627fb 100644 --- a/etc/grafana/dashboard.json +++ b/etc/grafana/dashboard.json @@ -1,1120 +1,1476 @@ { - "annotations": { - "list": [ + "apiVersion": "dashboard.grafana.app/v2beta1", + "kind": "Dashboard", + "metadata": { + "name": "invpublic", + "generation": 144, + "creationTimestamp": "2025-06-20T09:06:05Z", + "labels": {}, + "annotations": {} + }, + "spec": { + "annotations": [ { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" + "kind": "AnnotationQuery", + "spec": { + "builtIn": true, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "query": { + "group": "grafana", + "kind": "DataQuery", + "spec": {}, + "version": "v0" + } + } } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 198, - "links": [], - "panels": [ - { - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 10, - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "
No identifiable visitor data was used to create this status page.\n
All information were gathered by only using the built-in metrics endpoint of each invidious-companion, which only returns numbers and nothing more.
\nYou can check the source code of invidious companion for yourself here: https://github.com/iv-org/invidious-companion/blob/master/src/lib/helpers/metrics.ts
\nPlease note that grafana sadly fucks up the backend sorting (as you can see: 1, 10, 11, 12, 2, 3, ...) because it doesn't support proper numeric sorting.
\n", - "mode": "html" - }, - "pluginVersion": "12.1.0-89781", - "title": "Information", - "transparent": true, - "type": "text" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "id": 5, - "panels": [], - "title": "Backends", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "description": "The total number of backends", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": 0 - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 2, - "x": 0, - "y": 8 - }, - "id": 1, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "disableTextWrap": false, - "editorMode": "builder", - "exemplar": false, - "expr": "invidious_companion_total", - "format": "time_series", - "fullMetaSearch": false, - "includeNullMetadata": true, - "instant": true, - "legendFormat": "__auto", - "range": false, - "refId": "A", - "useBackend": false - } - ], - "title": "Backends", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "description": "The number of healthy backends", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "orange", - "value": 5 - }, - { - "color": "yellow", - "value": 7 - }, - { - "color": "green", - "value": 9 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 2, - "x": 2, - "y": 8 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "disableTextWrap": false, - "editorMode": "builder", - "exemplar": false, - "expr": "invidious_companion_healthy_total", - "format": "time_series", - "fullMetaSearch": false, - "includeNullMetadata": true, - "instant": true, - "legendFormat": "__auto", - "range": false, - "refId": "A", - "useBackend": false - } - ], - "title": "Healthy", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "description": "The number of unhealthy backends", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": 0 - }, - { - "color": "yellow", - "value": 4 - }, - { - "color": "red", - "value": 8 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 2, - "x": 4, - "y": 8 - }, - "id": 3, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "disableTextWrap": false, - "editorMode": "builder", - "exemplar": false, - "expr": "invidious_companion_unhealthy_total", - "format": "time_series", - "fullMetaSearch": false, - "includeNullMetadata": true, - "instant": true, - "legendFormat": "__auto", - "range": false, - "refId": "A", - "useBackend": false - } - ], - "title": "Unhealthy", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "max": 100, - "min": 0, - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 40 - }, - { - "color": "green", - "value": 70 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 19, - "w": 3, - "x": 6, - "y": 8 - }, - "id": 12, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": true, - "text": {}, - "textMode": "value_and_name", - "wideLayout": true - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "disableTextWrap": false, - "editorMode": "code", - "exemplar": false, - "expr": "avg by (instance) (\n (\n sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"}[6h])\n /\n (\n sum_over_time(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"}[6h])\n + sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"}[6h])\n )\n ) * 100\n)\n", - "format": "time_series", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "A", - "useBackend": false - } - ], - "title": "Backend stability (6hrs avg)", - "transformations": [ - { - "id": "renameByRegex", - "options": { - "regex": "invidious-companion-(.*)$", - "renamePattern": "$1" - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "right", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "area" - } - }, - "mappings": [], - "max": 100, - "min": 0, - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 40 - }, - { - "color": "green", - "value": 70 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 12, - "w": 15, - "x": 9, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "disableTextWrap": false, - "editorMode": "code", - "exemplar": false, - "expr": "avg by (instance) (\n (invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"})\n /\n (invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"} + invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"})\n) * 100\n", - "format": "time_series", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "A", - "useBackend": false - } - ], - "title": "Playback success rate by backend", - "transformations": [ - { - "id": "renameByRegex", - "options": { - "regex": "invidious-companion-(.*)$", - "renamePattern": "$1" - } - } - ], - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "description": "The average playback rate on my instance", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "max": 100, - "min": 0, - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 40 - }, - { - "color": "green", - "value": 70 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 13 - }, - "id": 11, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": true, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "disableTextWrap": false, - "editorMode": "code", - "exemplar": false, - "expr": "avg (\n (\n sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"}[3h])\n /\n (\n sum_over_time(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"}[3h])\n + sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"}[3h])\n )\n ) * 100\n)\n", - "format": "time_series", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "A", - "useBackend": false - } - ], - "title": "Playback success rate total over all backends", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "stepAfter", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "area" - } - }, - "fieldMinMax": false, - "mappings": [], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 50 - }, - { - "color": "green", - "value": 70 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 20 - }, - "id": 7, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "editorMode": "code", - "expr": "avg(\n invidious_companion_healthy_total\n /\n invidious_companion_total\n) * 100\n", - "legendFormat": "Instance health", - "range": true, - "refId": "A" - } - ], - "title": "Instance overall health", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "right", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "linearThreshold": 1, - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "fieldMinMax": false, - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": 0 - } - ] - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 15, - "x": 9, - "y": 20 - }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "editorMode": "code", - "expr": "rate(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"}[$__rate_interval])\n\n", - "interval": "1m", - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "Error rate by backend", - "transformations": [ - { - "id": "renameByRegex", - "options": { - "regex": "invidious-companion-(.*)$", - "renamePattern": "$1" - } - } - ], - "type": "timeseries" - }, - { - "datasource": { - "uid": "grafanacloud-prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "custom": { - "axisPlacement": "auto", - "fillOpacity": 60, - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineWidth": 0, - "spanNulls": false - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 0, - "text": "Down" - }, - "1": { - "color": "green", - "index": 1, - "text": "Up" + ], + "cursorSync": "Off", + "editable": true, + "elements": { + "panel-1": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "invidious_companion_total", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "The total number of backends", + "range": false, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } } + ], + "queryOptions": {}, + "transformations": [] + } + }, + "description": "The total number of backends", + "id": 1, + "links": [], + "title": "Backends", + "vizConfig": { + "group": "stat", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] }, - "type": "value" - } - ], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": 0 + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true } - ] - }, - "unit": "bool" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 24, - "x": 0, - "y": 27 - }, - "id": 13, - "options": { - "alignValue": "left", - "legend": { - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "mergeValues": true, - "rowHeight": 0.8, - "showValue": "never", - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "asc" - } - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "editorMode": "code", - "expr": "invidious_companion_healthy", - "legendFormat": "{{container}}", - "range": true, - "refId": "A" - } - ], - "title": "Backend uptime", - "transformations": [ - { - "id": "renameByRegex", - "options": { - "regex": "invidious-companion-(.*)$", - "renamePattern": "$1" + }, + "version": "12.2.0-16890666601.patch1" } } - ], - "type": "state-timeline" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "right", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" + "panel-10": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [], + "queryOptions": {}, + "transformations": [] } }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": 0 + "description": "", + "id": 10, + "links": [], + "title": "Information", + "transparent": true, + "vizConfig": { + "group": "text", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": {}, + "overrides": [] }, - { - "color": "red", - "value": 80 + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "No identifiable visitor data was used to create this status page.\n
All information were gathered by only using the built-in metrics endpoint of each invidious-companion, which only returns numbers and nothing more.
\nYou can check the source code of invidious companion for yourself here: https://github.com/iv-org/invidious-companion/blob/master/src/lib/helpers/metrics.ts
\nPlease note that I closely monitor the health of my instance and each backed via Prometheus alertmanager. So if anything goes full-scale wrong, I'll know soon enough and will give my best to fix it.
", + "mode": "html" } - ] - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 12, - "x": 0, - "y": 37 - }, - "id": 8, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "editorMode": "code", - "expr": "rate(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"}[$__rate_interval]) + rate(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"}[$__rate_interval])", - "interval": "60s", - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "Load absolute by backend", - "transformations": [ - { - "id": "renameByRegex", - "options": { - "regex": "invidious-companion-(.*)$", - "renamePattern": "$1" + }, + "version": "12.2.0-16890666601.patch1" } } - ], - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "grafanacloud-prom" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "right", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "percent" - }, - "thresholdsStyle": { - "mode": "line" + "panel-11": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "avg (\n (\n sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[1h])\n /\n (\n (sum_over_time(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[1h]))\n + sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[1h])\n )\n ) * 100\n)\n", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "The average playback rate on my instance", + "range": true, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [] } }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": 0 + "description": "The average playback rate on my instance", + "id": 11, + "links": [], + "title": "Overall Playback success rate", + "vizConfig": { + "group": "stat", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "max": 100, + "min": 0, + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 40 + }, + { + "color": "green", + "value": 70 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": true, + "textMode": "value", + "wideLayout": true } - ] - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 12, - "x": 12, - "y": 37 - }, - "id": 9, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.1.0-89781", - "targets": [ - { - "editorMode": "code", - "expr": "rate(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\"}[$__rate_interval]) + rate(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"}[$__rate_interval])", - "interval": "60s", - "legendFormat": "{{instance}}", - "range": true, - "refId": "A" - } - ], - "title": "Load relative", - "transformations": [ - { - "id": "renameByRegex", - "options": { - "regex": "invidious-companion-(.*)$", - "renamePattern": "$1" + }, + "version": "12.2.0-16890666601.patch1" } } + }, + "panel-12": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "avg by (instance) (\n (\n sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[3h])\n /\n (\n (sum_over_time(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[3h]))\n + sum_over_time(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[3h])\n )\n ) * 100\n)\n", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{instance}}", + "range": true, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [ + { + "kind": "renameByRegex", + "spec": { + "id": "renameByRegex", + "options": { + "regex": "invidious-companion-(.*)$", + "renamePattern": "$1" + } + } + } + ] + } + }, + "description": "", + "id": 12, + "links": [], + "title": "Backend stability (3hrs avg)", + "vizConfig": { + "group": "stat", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "max": 100, + "min": 0, + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 40 + }, + { + "color": "green", + "value": 70 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": true, + "text": {}, + "textMode": "value_and_name", + "wideLayout": true + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-13": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "editorMode": "code", + "expr": "invidious_companion_healthy{container!~\"invidious-companion-[0-9]$\"}", + "legendFormat": "{{container}}", + "range": true + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [ + { + "kind": "renameByRegex", + "spec": { + "id": "renameByRegex", + "options": { + "regex": "invidious-companion-(.*)$", + "renamePattern": "$1" + } + } + } + ] + } + }, + "description": "", + "id": 13, + "links": [], + "title": "Backend uptime", + "vizConfig": { + "group": "state-timeline", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-GrYlRd" + }, + "custom": { + "axisPlacement": "auto", + "fillOpacity": 60, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineWidth": 0, + "spanNulls": false + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 0, + "text": "Down" + }, + "1": { + "color": "green", + "index": 1, + "text": "Up" + } + }, + "type": "value" + } + ], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "bool" + }, + "overrides": [] + }, + "options": { + "alignValue": "left", + "legend": { + "displayMode": "list", + "placement": "right", + "showLegend": false + }, + "mergeValues": true, + "rowHeight": 0.8, + "showValue": "never", + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "asc" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-14": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "invidious_companion_network_load_percent", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "Network load", + "range": true, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [] + } + }, + "description": "max available bandwidth: 2 Gbps", + "id": 14, + "links": [], + "title": "Network load (%)", + "vizConfig": { + "group": "timeseries", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 30, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "#EAB839", + "value": 60 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-2": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "invidious_companion_healthy_total", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "The number of healthy backends", + "range": false, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [] + } + }, + "description": "The number of healthy backends", + "id": 2, + "links": [], + "title": "Up", + "vizConfig": { + "group": "stat", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "orange", + "value": 5 + }, + { + "color": "yellow", + "value": 7 + }, + { + "color": "green", + "value": 9 + } + ] + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-3": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "invidious_companion_unhealthy_total", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "The number of unhealthy backends", + "range": false, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [] + } + }, + "description": "The number of unhealthy backends", + "id": 3, + "links": [], + "title": "Down", + "vizConfig": { + "group": "stat", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 8 + }, + { + "color": "red", + "value": 10 + } + ] + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-4": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "avg by (instance) (\n (invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"})\n /\n ((invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\"}) + invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"})\n) * 100\n", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "useBackend": false + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [ + { + "kind": "renameByRegex", + "spec": { + "id": "renameByRegex", + "options": { + "regex": "invidious-companion-(.*)$", + "renamePattern": "$1" + } + } + } + ] + } + }, + "description": "", + "id": 4, + "links": [], + "title": "Playback success rate by backend", + "vizConfig": { + "group": "timeseries", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "right", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "area" + } + }, + "max": 100, + "min": 0, + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 40 + }, + { + "color": "green", + "value": 70 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-6": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "editorMode": "code", + "expr": "rate(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[$__rate_interval])\n\n", + "interval": "1m", + "legendFormat": "{{instance}}", + "range": true + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [ + { + "kind": "renameByRegex", + "spec": { + "id": "renameByRegex", + "options": { + "regex": "invidious-companion-(.*)$", + "renamePattern": "$1" + } + } + } + ] + } + }, + "description": "", + "id": 6, + "links": [], + "title": "Error rate by backend", + "vizConfig": { + "group": "timeseries", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "right", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "linearThreshold": 1, + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "fieldMinMax": false, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-7": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "editorMode": "code", + "expr": "avg(\n invidious_companion_healthy_total\n /\n invidious_companion_total\n) * 100\n", + "legendFormat": "Instance health", + "range": true + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [] + } + }, + "description": "", + "id": 7, + "links": [], + "title": "Instance overall health", + "vizConfig": { + "group": "timeseries", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepAfter", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "area" + } + }, + "fieldMinMax": false, + "max": 100, + "min": 0, + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "green", + "value": 70 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-8": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "editorMode": "code", + "expr": "rate(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[$__rate_interval]) + rate(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[$__rate_interval])", + "interval": "60s", + "legendFormat": "{{instance}}", + "range": true + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [ + { + "kind": "renameByRegex", + "spec": { + "id": "renameByRegex", + "options": { + "regex": "invidious-companion-(.*)$", + "renamePattern": "$1" + } + } + } + ] + } + }, + "description": "", + "id": 8, + "links": [], + "title": "Load (absolute) by backend", + "vizConfig": { + "group": "timeseries", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "right", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + }, + "panel-9": { + "kind": "Panel", + "spec": { + "data": { + "kind": "QueryGroup", + "spec": { + "queries": [ + { + "kind": "PanelQuery", + "spec": { + "hidden": false, + "query": { + "group": "prometheus", + "kind": "DataQuery", + "spec": { + "editorMode": "code", + "expr": "rate(invidious_companion_innertube_successful_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[$__rate_interval]) + rate(invidious_companion_innertube_failed_request_total{instance!=\"invidious.nerdvpn.de\", instance!~\"invidious-companion-[0-9]$\"}[$__rate_interval])", + "interval": "60s", + "legendFormat": "{{instance}}", + "range": true + }, + "version": "v0" + }, + "refId": "A" + } + } + ], + "queryOptions": {}, + "transformations": [ + { + "kind": "renameByRegex", + "spec": { + "id": "renameByRegex", + "options": { + "regex": "invidious-companion-(.*)$", + "renamePattern": "$1" + } + } + } + ] + } + }, + "description": "", + "id": 9, + "links": [], + "title": "Load (relative) by backend", + "vizConfig": { + "group": "timeseries", + "kind": "VizConfig", + "spec": { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "right", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "decimals": 1, + "noValue": "0", + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + } + }, + "version": "12.2.0-16890666601.patch1" + } + } + } + }, + "layout": { + "kind": "GridLayout", + "spec": { + "items": [ + { + "kind": "GridLayoutItem", + "spec": { + "element": { + "kind": "ElementReference", + "name": "panel-10" + }, + "height": 7, + "width": 24, + "x": 0, + "y": 0 + } + } + ] + } + }, + "links": [], + "liveNow": false, + "preload": false, + "tags": [], + "timeSettings": { + "autoRefresh": "", + "autoRefreshIntervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" ], - "type": "timeseries" - } - ], - "preload": false, - "schemaVersion": 41, - "tags": [], - "templating": { - "list": [] + "fiscalYearStartMonth": 0, + "from": "now-6h", + "hideTimepicker": false, + "timezone": "browser", + "to": "now", + "weekStart": "monday" + }, + "title": "Invidious.NerdVPN.de Instance Health", + "variables": [] }, - "time": { - "from": "now-3h", - "to": "now" - }, - "timepicker": {}, - "timezone": "browser", - "title": "Invidious.NerdVPN.de Instance Health", - "uid": "invpublic", - "version": 92, - "weekStart": "monday" + "status": {} }