{"id":1897,"date":"2020-06-24T07:46:00","date_gmt":"2020-06-24T07:46:00","guid":{"rendered":"https:\/\/thriving-sanctuary.dbc4320.deploio.app\/prometheus-textfile-collectors\/"},"modified":"2024-09-05T09:54:52","modified_gmt":"2024-09-05T09:54:52","slug":"prometheus-textfile-collectors","status":"publish","type":"post","link":"https:\/\/archive.5fcf01f.deploio.app\/de\/prometheus-textfile-collectors\/","title":{"rendered":"Prometheus Metriken mit Textfile Collectors"},"content":{"rendered":"\n<p>Nachdem wir hier im Blog bereits&nbsp;unser neues Monitoringsystem Prometheus vorgestellt haben, welches unsere Nagios Installation ersetzt hat, m\u00f6chte ich in diesem Beitrag etwas tiefer in die technischen Details der Implementierung eintauchen. Dazu m\u00f6chte ich zun\u00e4chst die unterschiedlichen Quellen f\u00fcr Prometheus-Metriken vorstellen und speziell auf den \u201cNode Textfile Collector\u201d als flexible L\u00f6sung f\u00fcr die Erstellung einfacher Metriken eingehen.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>Anhand eines Praxis-Beispiels zeige ich anschliessend noch, wie sich ein vorhandenes Nagios-NRPE-Script so umbauen l\u00e4sst, dass es zur Generierung von Prometheus-Metriken weiterverwendet werden kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prometheus Quellen<\/h2>\n\n\n\n<p>Unsere Prometheus Monitoring Server beziehen Ihre Metriken direkt von den zu \u00fcberwachenden Systemen. Diese werden dem Monitoringserver \u00fcber eine HTTP-Schnittstelle zur Verf\u00fcgung gestellt. Um Prometheus-kompatible Metriken von einer Anwendung zu erhalten, gibt es mehrere M\u00f6glichkeiten:<\/p>\n\n\n\n<p>Im einfachsten Fall stellt eine Applikation wie zum Beispiel&nbsp;<a href=\"https:\/\/www.rabbitmq.com\/prometheus.html\">RabbitMQ (ab Version 3.8.0)<\/a>&nbsp;oder&nbsp;<a href=\"https:\/\/github.com\/containous\/traefik\/blob\/master\/README.md#features\">Traefik<\/a>&nbsp;Prometheus-kompatible Metriken selbst zur Verf\u00fcgung.&nbsp;<\/p>\n\n\n\n<p>Generiert die zu \u00fcberwachende Applikation keine eigenen Metriken, k\u00f6nnen diese \u00fcber einen separaten Prometheus Exporter erstellt werden. Der Exporter kommuniziert mit der jeweiligen Applikation und erstellt aus deren Performance-Werten Prometheus-kompatible Metriken, die der Monitoringserver per HTTP-Request auf dem jeweiligen Exporter-Port abfragen kann. Fertige Prometheus Exporter stehen&nbsp;<a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/exporters\/\">f\u00fcr eine grosse Zahl von Applikationen zur Verf\u00fcgung.<\/a><\/p>\n\n\n\n<p>Gibt es keinen fertigen Exporter f\u00fcr den gew\u00fcnschten Einsatzzweck, besteht noch die M\u00f6glichkeit,&nbsp;<a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/writing_exporters\/\">einen eigenen Exporter zu schreiben.<\/a>&nbsp;Gerade bei einfach zu generierenden Metriken stellt die Implementierung aber einen relativ grossen Aufwand dar. Falls die Metrik auch nicht in Echtzeit aktualisiert werden muss, ist daher ein Textfile Collector f\u00fcr den Node Exporter eine sinnvolle Alternative.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Textfile Collector Scripts f\u00fcr den Node Exporter<\/h2>\n\n\n\n<p>Der&nbsp;<a href=\"https:\/\/github.com\/prometheus\/node_exporter\">Prometheus Node Exporter<\/a>&nbsp;stellt grundlegende Hardware- und Betriebssystem-Metriken zur Verf\u00fcgung. Er ist daher auf jedem unserer Managed Server installiert. Zus\u00e4tzlich zu den vorhandenen Metriken bietet er die M\u00f6glichkeit, \u00fcber den integrierten Textfile Collector selbst erstellte Metriken aus Textfiles im Prometheus-Format bei Abfragen mitzuliefern. Wie diese Textfiles erstellt werden, ist unerheblich, so dass hierf\u00fcr jede Form von Scripts genutzt werden kann. Dieses muss nur per Cronjob regelm\u00e4ssig ausgef\u00fchrt werden, um die Metriken zu aktualisieren. Daf\u00fcr kann beispielsweise ein Shellscript verwendet werden. Wichtig ist lediglich, dass das Script&nbsp;<a href=\"https:\/\/prometheus.io\/docs\/instrumenting\/exposition_formats\/\">die generierten Metriken im passenden Format ausgibt.<\/a><\/p>\n\n\n\n<p>Bei der Abl\u00f6sung unseres Nagios-Monitorings war es ein wichtiges Ziel, alle vorhandenen individuell entwickelten Nagios-Checks auch weiterhin in Prometheus zur Verf\u00fcgung zu haben. Das sind vor allem Checks, die nur auf einzelnen Maschinen oder interner Infrastruktur zum Einsatz kommen. Gerade hier konnten wir mittels solcher Scripte f\u00fcr den Textfile Collector die vorhandenen Checks auf einfache Art und Weise f\u00fcr unser neues Monitoring verf\u00fcgbar machen.<\/p>\n\n\n\n<p>Aber auch neue Checks, die bisher nicht in unserem Nagios-Monitoring enthalten waren, lassen sich so schnell und einfach realisieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ein einfaches Textfile Collector Script<\/h2>\n\n\n\n<p>Im Folgenden ein einfaches Beispiel f\u00fcr eine Custom Metrik per Textfile Collector Script:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n#!\/bin\/bash\n#\n## Description: Check mysqldump log for errors\n## File should be empty\n#\nMYSQL_DUMP_ERROR_COUNT=$(\/usr\/bin\/wc -l &lt; \/home\/db-backup\/error.log)\u00a0# redirect file to avoid printing filename in output\necho\u00a0&#039;# HELP mysql_dump_error_count Number of errors occurred during mysql dump&#039;\necho\u00a0&#039;# TYPE mysql_dump_error_count gauge&#039;\necho\u00a0&quot;mysql_dump_error_count\u00a0${MYSQL_DUMP_ERROR_COUNT}&quot;\n<\/pre><\/div>\n\n\n<p>Bevor das eigentliche n\u00e4chtliche Backup stattfindet, wird auf unseren Managed Servern zun\u00e4chst ein MySQL-Dump erstellt, um \u00fcber eine konsistente Sicherung der Datenbanken zu verf\u00fcgen. Auch ohne gr\u00f6ssere Scriptingkenntnisse l\u00e4sst sich leicht erkennen, was das obige Shellscript tut: Es pr\u00fcft den Inhalt der Datei \/home\/db-backup\/error.log, in die Fehler w\u00e4hrend des SQL Dumps geloggt werden und gibt die Anzahl Zeilen der Logdatei als Metrik \u201cmysql_dump_error_count\u201d aus.<\/p>\n\n\n\n<p>Im Idealfall, also bei leerer error.log-Datei, erzeugt das Script beim Aufruf die folgende Ausgabe:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nroot@host:~#\u00a0\/usr\/local\/bin\/node_exporter_textfile_collector\/mysql_backup.sh\n# HELP mysql_dump_error_count Number of errors occurred during mysql dump\n# TYPE mysql_dump_error_count gauge\nmysql_dump_error_count 0\nroot@host:~#\n<\/pre><\/div>\n\n\n<p>Neben der eigentlichen Metrik ist als Kommentar noch eine Erl\u00e4uterung zu dieser sowie der Typ der Metrik (in diesem Fall \u201cgauge\u201d) definiert. Mehr zu den vier unterschiedlichen Typen von Prometheus-Metriken findet sich&nbsp;<a href=\"https:\/\/prometheus.io\/docs\/concepts\/metric_types\/\">hier<\/a>.<\/p>\n\n\n\n<p>Ein Cronjob ruft das Script jeden Morgen auf, nachdem die Backups abgeschlossen wurden, und schreibt die Ausgabe in eine Datei, die vom Node-Exporter ausgelesen und deren Metriken bei einem Request des Monitoringservers mit an diesen zur\u00fcckgegeben werden. Auf Seiten des Monitoringservers ist dann nur noch eine passende Regel f\u00fcr diese Metrik erforderlich, in der definiert ist, wann ein Alert ausgel\u00f6st werden soll:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n\u00a0-\u00a0alert:\u00a0MySQLDumpError\n\u00a0 \u00a0\u00a0expr:\u00a0mysql_dump_error_count &gt; 0\n\u00a0 \u00a0\u00a0for:\u00a05m\n\u00a0 \u00a0\u00a0labels:\n\u00a0 \u00a0 \u00a0\u00a0severity: warning\n\u00a0 \u00a0\u00a0annotations:\n\u00a0 \u00a0 \u00a0\u00a0summary:\u00a0&quot;There is an error with mysqldumps on &quot;\n\u00a0 \u00a0 \u00a0\u00a0description:\u00a0&quot;Detected an error during mysqldump - see \/home\/db-backup\/error.log&quot;\n<\/pre><\/div>\n\n\n<p><a href=\"https:\/\/prometheus.io\/docs\/prometheus\/latest\/configuration\/recording_rules\/\">Alerting Rules werden nach einer festen Syntax erstellt<\/a>&nbsp;und werten jeweils einen bestimmten Ausdruck aus. In unserem Fall wird eine Warnung f\u00fcr jeden Wert der Metrik gr\u00f6sser 0 generiert (mysql_dump_error_count &gt; 0), da dies auf Fehlermeldungen im Logfile hinweist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Textfile Collector-Nutzung f\u00fcr Fortgeschrittene: Recycling eines Nagios-Scripts f\u00fcrs SSL-Expiry-Monitoring<\/h2>\n\n\n\n<p>Zum Abschluss noch ein sch\u00f6nes Beispiel aus der Praxis zum Thema SSL-Zertifikate:<\/p>\n\n\n\n<p>Auch bisher schon monitoren wir deren Ablaufdatum, um uns rechtzeitig um deren Verl\u00e4ngerung k\u00fcmmern zu k\u00f6nnen. In das Monitoring einbezogen werden alle Zertifikate im Pfad \/etc\/ssl\/certs, deren Dateiname mit SSL_ beginnt. F\u00fcr die Migration des Checks auf Prometheus kamen folgende Optionen in Frage:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Die Verwendung eines vorhandenen SSL Certificate Exporters, beispielsweise&nbsp;<a href=\"https:\/\/github.com\/ribbybibby\/ssl_exporter\">von diesem<\/a>: Diese Idee wurde verworfen, da hier Zertifikate im Gegensatz zur bisherigen L\u00f6sung \u00fcber eine TLS-Verbindung von aussen gemonitored werden. Dies h\u00e4tte den Nachteil, dass bestimmte Zertifikate nicht ber\u00fccksichtigt werden, z.B.&nbsp; wenn diese nur von einer ausschliesslich intern erreichbaren Applikation verwendet werden.<\/li>\n\n\n\n<li>Das Schreiben eines eigenen Exporters: Auch dies w\u00e4re nicht sinnvoll, da der Aufwand im Verh\u00e4ltnis zu den ben\u00f6tigten Metriken (eigentlich nur Tage bis zum Ablauf und G\u00fcltigkeit der Chain) zu gross ist. Eine Aktualisierung der Metriken in Echtzeit ist f\u00fcr diesen Anwendungsfall ebenfalls \u00fcberfl\u00fcssig.<\/li>\n\n\n\n<li>Das Erstellen eines Textfile Collector Scripts: In diesem Fall die einfachste L\u00f6sung, daher wurde dieser Ansatz gew\u00e4hlt.<\/li>\n<\/ol>\n\n\n\n<p>Aber es geht noch einfacher: Warum ein von Grund auf neues Script erstellen, wenn diese Aufgabe jetzt bereits von Nagios per NRPE-Script erledigt wird? W\u00e4re es nicht einfacher, das vorhandene Script an die neuen Erfordernisse anzupassen? Schauen wir uns den relevanten Teil des vorhandenen Ruby-Scripts dazu n\u00e4her an:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n#!\/usr\/bin\/env ruby2.5\n...\nssl_certificates = options&#x5B;:glob_path].map { |g| Dir.glob(g) }.flatten.delete_if { |f| f =~ \/(\\.chain\\.crt|\\.csr)$\/ }\n\nok_certs = &#x5B;]\nwarning_certs = &#x5B;]\ncritical_certs = &#x5B;]\n\nssl_certificates.each do |cert_path|\n  raw = File.read cert_path\n  certificate = OpenSSL::X509::Certificate.new raw \n\n warning_state_at = certificate.not_after - options&#x5B;:warning]\n  critical_state_at = certificate.not_after - options&#x5B;:critical]\n\n if Time.now &gt;= warning_state_at\n    if Time.now &gt;= critical_state_at\n      critical_certs &lt;&lt; &quot;#{cert_path} expires in #{(certificate.not_after-Time.now).to_i.seconds_to_days} days&quot;\n    else\n      warning_certs &lt;&lt; &quot;#{cert_path} expires in #{(certificate.not_after-Time.now).to_i.seconds_to_days} days&quot;\n    end\n  else\n   ok_certs &lt;&lt; &quot;#{File.basename cert_path} (#{certificate.not_after.strftime(&#039;%Y-%m-%d&#039;)})&quot;\n  end\nend\n\ncase\n  when critical_certs.any?\n    print_message(critical_certs, :critical)\n    exit_code = 2\n  when warning_certs.any?\n    print_message(warning_certs, :warning)\n    exit_code = 1\n  else\n    print_message(ok_certs, :ok)\n    exit_code = 0\nend\n\nexit exit_code\n<\/pre><\/div>\n\n\n<p>Das Script macht grunds\u00e4tzlich schon einmal das, was wir ben\u00f6tigen: Es pr\u00fcft das Ablaufdatum des Zertifikats und berechnet daraus, wie viele Tage dieses noch g\u00fcltig ist.&nbsp;<\/p>\n\n\n\n<p>Zus\u00e4tzlich enth\u00e4lt das Script eine Logik, die bestimmt, wann sich ein Zertifikat im Status \u201cOK\u201d, \u201cWarning\u201d oder \u201cCritical\u201d befindet. Diese Logik ben\u00f6tigen wir f\u00fcr Prometheus nicht mehr, da die Bewertung, wann eine Warnung oder ein Alarm ausgel\u00f6st wird, wie oben gesehen auf dem Monitoring Server anhand einer Regel bestimmt wird.<\/p>\n\n\n\n<p>Das Script selbst soll uns stattdessen nur die Tage bis zum Zertifikatsablauf im passenden Format zur\u00fcckgeben. Nach einer \u00dcberarbeitung sieht der Ausschnitt so aus:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nssl_certificates = options&#x5B;:glob_path].map { |g| Dir.glob(g) }.flatten.delete_if { |f| f =~ \/(\\.chain\\.crt|\\.csr)$\/ }\n\ncert_days_left = &#x5B;]\n\nssl_certificates.each do |cert_path|\n\u00a0\u00a0raw = File.read cert_path\n\u00a0\u00a0certificate = OpenSSL::X509::Certificate.new raw\u00a0\u00a0\n\ncert_days_left &lt;&lt; &quot;ssl_certificate_days_left{certfile=\\&quot;#{File.basename cert_path}\\&quot;, certpath=\\&quot;#{cert_path}\\&quot;} #{(certificate.not_after-Time.now).to_i.seconds_to_days}&quot;\n\nend\n\nputs &quot;# HELP ssl_certificate_days_left Days until certificate expiry\\n# TYPE ssl_certificate_days_left gauge&quot;\nputs cert_days_left.join(&quot;\\n&quot;)\n\nexit_code = 0\n\nexit exit_code\n<\/pre><\/div>\n\n\n<p>Da ein Grossteil der Logik weggefallen ist, ist das Script entsprechend \u00fcbersichtlicher geworden. Seine Ausgabe sieht folgendermassen aus:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nroot@host:~\u00a0# \/usr\/local\/bin\/node_exporter_textfile_collector\/x509_expiry.rb\n# HELP ssl_certificate_days_left Days until certificate expiry\n# TYPE ssl_certificate_days_left gauge\nssl_certificate_days_left{certfile=&quot;SSL_wildcard.nine.ch.crt&quot;, certpath=&quot;\/etc\/ssl\/certs\/SSL_wildcard.nine.ch.crt&quot;} 672\nroot@host:~\u00a0#\n<\/pre><\/div>\n\n\n<p>Fertig! Das Script gibt uns nun f\u00fcr alle Zertifikate die verbleibende G\u00fcltigkeitsdauer in Tagen als Metrik zur\u00fcck. In Wirklichkeit wurden nat\u00fcrlich noch \u00c4nderungen am Optionparser und an weiteren Stellen vorgenommen, aber der gr\u00f6sste Teil der Arbeit ist an dieser Stelle bereits gemacht. Gegen\u00fcber der Neuerstellung eines Scripts konnten wir uns durch diese einfache Anpassung eine Menge Arbeit sparen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem wir hier im Blog bereits&nbsp;unser neues Monitoringsystem Prometheus vorgestellt haben, welches unsere Nagios Installation ersetzt hat, m\u00f6chte ich in diesem Beitrag etwas tiefer in die technischen Details der Implementierung eintauchen. Dazu m\u00f6chte ich zun\u00e4chst die unterschiedlichen Quellen f\u00fcr Prometheus-Metriken vorstellen und speziell auf den \u201cNode Textfile Collector\u201d als flexible L\u00f6sung f\u00fcr die Erstellung einfacher [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":1248,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[401],"tags":[402],"class_list":["post-1897","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hinterdenkulissen","tag-databases-de"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Prometheus Metriken mit Textfile Collectors - Nine<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Prometheus Metriken mit Textfile Collectors - Nine\" \/>\n<meta property=\"og:description\" content=\"Nachdem wir hier im Blog bereits&nbsp;unser neues Monitoringsystem Prometheus vorgestellt haben, welches unsere Nagios Installation ersetzt hat, m\u00f6chte ich in diesem Beitrag etwas tiefer in die technischen Details der Implementierung eintauchen. Dazu m\u00f6chte ich zun\u00e4chst die unterschiedlichen Quellen f\u00fcr Prometheus-Metriken vorstellen und speziell auf den \u201cNode Textfile Collector\u201d als flexible L\u00f6sung f\u00fcr die Erstellung einfacher [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\" \/>\n<meta property=\"og:site_name\" content=\"Nine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/NineInternetSolutionsAG\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-24T07:46:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-05T09:54:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nine.ch\/app\/uploads\/2024\/03\/shot-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Dirk Rauber\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nine_ch\" \/>\n<meta name=\"twitter:site\" content=\"@nine_ch\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dirk Rauber\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\"},\"author\":{\"name\":\"Dirk Rauber\",\"@id\":\"https:\/\/nine.ch\/#\/schema\/person\/3201fbb871e52b7a868bb0d5d83053a6\"},\"headline\":\"Prometheus Metriken mit Textfile Collectors\",\"datePublished\":\"2020-06-24T07:46:00+00:00\",\"dateModified\":\"2024-09-05T09:54:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\"},\"wordCount\":1177,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/nine.ch\/#organization\"},\"image\":{\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp\",\"keywords\":[\"Datenbanken\"],\"articleSection\":[\"Hinter den Kulissen\"],\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\",\"url\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\",\"name\":\"Prometheus Metriken mit Textfile Collectors - Nine\",\"isPartOf\":{\"@id\":\"https:\/\/nine.ch\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp\",\"datePublished\":\"2020-06-24T07:46:00+00:00\",\"dateModified\":\"2024-09-05T09:54:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#breadcrumb\"},\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage\",\"url\":\"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp\",\"contentUrl\":\"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp\",\"width\":600,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/nine.ch\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Prometheus Metriken mit Textfile Collectors\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nine.ch\/#website\",\"url\":\"https:\/\/nine.ch\/\",\"name\":\"Nine\",\"description\":\"Cloud Navigators\",\"publisher\":{\"@id\":\"https:\/\/nine.ch\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nine.ch\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de-DE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nine.ch\/#organization\",\"name\":\"Nine\",\"url\":\"https:\/\/nine.ch\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\/\/nine.ch\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2023\/11\/Logo-SVG.svg\",\"contentUrl\":\"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2023\/11\/Logo-SVG.svg\",\"caption\":\"Nine\"},\"image\":{\"@id\":\"https:\/\/nine.ch\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/NineInternetSolutionsAG\",\"https:\/\/x.com\/nine_ch\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/nine.ch\/#\/schema\/person\/3201fbb871e52b7a868bb0d5d83053a6\",\"name\":\"Dirk Rauber\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\/\/nine.ch\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bfe72efa41ec47ad296e25443008e006d95ff5b61608784a05a6ad41a471d8ba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bfe72efa41ec47ad296e25443008e006d95ff5b61608784a05a6ad41a471d8ba?s=96&d=mm&r=g\",\"caption\":\"Dirk Rauber\"},\"url\":\"https:\/\/archive.5fcf01f.deploio.app\/de\/author\/dirk-rauber\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Prometheus Metriken mit Textfile Collectors - Nine","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/","og_locale":"de_DE","og_type":"article","og_title":"Prometheus Metriken mit Textfile Collectors - Nine","og_description":"Nachdem wir hier im Blog bereits&nbsp;unser neues Monitoringsystem Prometheus vorgestellt haben, welches unsere Nagios Installation ersetzt hat, m\u00f6chte ich in diesem Beitrag etwas tiefer in die technischen Details der Implementierung eintauchen. Dazu m\u00f6chte ich zun\u00e4chst die unterschiedlichen Quellen f\u00fcr Prometheus-Metriken vorstellen und speziell auf den \u201cNode Textfile Collector\u201d als flexible L\u00f6sung f\u00fcr die Erstellung einfacher [&hellip;]","og_url":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/","og_site_name":"Nine","article_publisher":"https:\/\/www.facebook.com\/NineInternetSolutionsAG","article_published_time":"2020-06-24T07:46:00+00:00","article_modified_time":"2024-09-05T09:54:52+00:00","og_image":[{"width":600,"height":400,"url":"https:\/\/nine.ch\/app\/uploads\/2024\/03\/shot-1.webp","type":"image\/webp"}],"author":"Dirk Rauber","twitter_card":"summary_large_image","twitter_creator":"@nine_ch","twitter_site":"@nine_ch","twitter_misc":{"Written by":"Dirk Rauber","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#article","isPartOf":{"@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/"},"author":{"name":"Dirk Rauber","@id":"https:\/\/nine.ch\/#\/schema\/person\/3201fbb871e52b7a868bb0d5d83053a6"},"headline":"Prometheus Metriken mit Textfile Collectors","datePublished":"2020-06-24T07:46:00+00:00","dateModified":"2024-09-05T09:54:52+00:00","mainEntityOfPage":{"@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/"},"wordCount":1177,"commentCount":0,"publisher":{"@id":"https:\/\/nine.ch\/#organization"},"image":{"@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage"},"thumbnailUrl":"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp","keywords":["Datenbanken"],"articleSection":["Hinter den Kulissen"],"inLanguage":"de-DE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/","url":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/","name":"Prometheus Metriken mit Textfile Collectors - Nine","isPartOf":{"@id":"https:\/\/nine.ch\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage"},"image":{"@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage"},"thumbnailUrl":"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp","datePublished":"2020-06-24T07:46:00+00:00","dateModified":"2024-09-05T09:54:52+00:00","breadcrumb":{"@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#breadcrumb"},"inLanguage":"de-DE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/"]}]},{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#primaryimage","url":"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp","contentUrl":"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2024\/03\/shot-1.webp","width":600,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/nine.ch\/de\/prometheus-textfile-collectors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nine.ch\/de\/"},{"@type":"ListItem","position":2,"name":"Prometheus Metriken mit Textfile Collectors"}]},{"@type":"WebSite","@id":"https:\/\/nine.ch\/#website","url":"https:\/\/nine.ch\/","name":"Nine","description":"Cloud Navigators","publisher":{"@id":"https:\/\/nine.ch\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nine.ch\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de-DE"},{"@type":"Organization","@id":"https:\/\/nine.ch\/#organization","name":"Nine","url":"https:\/\/nine.ch\/","logo":{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/nine.ch\/#\/schema\/logo\/image\/","url":"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2023\/11\/Logo-SVG.svg","contentUrl":"https:\/\/archive.5fcf01f.deploio.app\/app\/uploads\/2023\/11\/Logo-SVG.svg","caption":"Nine"},"image":{"@id":"https:\/\/nine.ch\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/NineInternetSolutionsAG","https:\/\/x.com\/nine_ch"]},{"@type":"Person","@id":"https:\/\/nine.ch\/#\/schema\/person\/3201fbb871e52b7a868bb0d5d83053a6","name":"Dirk Rauber","image":{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/nine.ch\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/bfe72efa41ec47ad296e25443008e006d95ff5b61608784a05a6ad41a471d8ba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bfe72efa41ec47ad296e25443008e006d95ff5b61608784a05a6ad41a471d8ba?s=96&d=mm&r=g","caption":"Dirk Rauber"},"url":"https:\/\/archive.5fcf01f.deploio.app\/de\/author\/dirk-rauber\/"}]}},"_links":{"self":[{"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/posts\/1897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/comments?post=1897"}],"version-history":[{"count":1,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/posts\/1897\/revisions"}],"predecessor-version":[{"id":3530,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/posts\/1897\/revisions\/3530"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/media\/1248"}],"wp:attachment":[{"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/media?parent=1897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/categories?post=1897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/archive.5fcf01f.deploio.app\/de\/wp-json\/wp\/v2\/tags?post=1897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}