{"id":86200,"date":"2020-06-22T13:42:20","date_gmt":"2020-06-22T11:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes"},"modified":"2020-06-22T13:42:20","modified_gmt":"2020-06-22T11:42:20","slug":"monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes","title":{"rendered":"\u00d6vervakning och loggning av externa tj\u00e4nster i Kubernetes-kluster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00d6vervakning och loggning av externa tj\u00e4nster i Kubernetes-kluster\" src=\"\/wp-content\/uploads\/2020\/06\/d3de818853c6820311de51e79aec56a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGod dag allihopa.<\/p>\n<p>Jag har inte kunnat hitta en generell guide f\u00f6r loggning och insamling av metrik fr\u00e5n externa tj\u00e4nster i system som \u00e4r deployerade i <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\">Kubernetes<\/a><\/noindex>. Jag publicerar min l\u00f6sning. Denna artikel f\u00f6ruts\u00e4tter att du redan har en fungerande <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> och andra tj\u00e4nster. Som exempel p\u00e5 en datak\u00e4lla fr\u00e5n en extern stateful-tj\u00e4nst kommer en databas att anv\u00e4ndas <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex> i en container <noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\">Docker<\/a><\/noindex>. F\u00f6retaget anv\u00e4nder en paketchef <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\">Helm<\/a><\/noindex>, nedan kommer det att finnas exempel p\u00e5 denna. F\u00f6r hela l\u00f6sningen f\u00f6rbereder vi en egen chart som inkluderar inb\u00e4ddade charts f\u00f6r alla anv\u00e4nda tj\u00e4nster.<br \/>\n <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Loggning<\/h4>\n<p>\nM\u00e5nga f\u00f6retag anv\u00e4nder en teknikstack f\u00f6r insamling och centralisering av loggar <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/\">Elasticsearch<\/a><\/noindex> + <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/products\/logstash\">Logstash<\/a><\/noindex> + <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/products\/kibana\">kibana<\/a><\/noindex>, f\u00f6rkortat ELK. I v\u00e5rt fall finns det inget behov av att indexera inneh\u00e5llet, och jag anv\u00e4nde en l\u00e4ttare <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/oss\/loki\/\">Loki<\/a><\/noindex>. Den \u00e4r tillg\u00e4nglig som en Helm-paket, vi har lagt till den som en subchart och \u00e4ndrat v\u00e4rden f\u00f6r ingress och pv f\u00f6r v\u00e5rt system.<\/p>\n<p>                        <b class=\"spoiler_title\">values.yaml<\/b><\/p>\n<pre><code class=\"xml\">ingress:\n  enabled: true\n  annotations:\n     kubernetes.io\/ingress.class: nginx\n  hosts:\n    - host: kube-loki.example.domain\n      paths: \n        - \/\n  tls: []\n\n....\n\npersistence:\n  type: pvc\n  enabled: true\n  accessModes:\n    - ReadWriteOnce\n  size: 100Gi\n  finalizers:\n    - kubernetes.io\/pvc-protection\n  existingClaim: \"pv-loki\"\n<\/code><\/pre>\n<p>F\u00f6r att skicka loggar till instansen <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/oss\/loki\/\">Loki<\/a><\/noindex> VPS KVM. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grafana\/loki\/tree\/master\/cmd\/docker-driver\">Loki Docker Logging Driver<\/a><\/noindex>.<\/p>\n<p>M\u00e5ste detta till\u00e4gg installeras p\u00e5 alla <noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\">Docker<\/a><\/noindex> v\u00e4rdar d\u00e4r du vill ta emot loggar. Det finns flera s\u00e4tt att ange f\u00f6r demon hur man anv\u00e4nder till\u00e4gget. Jag v\u00e4ljer drivrutinen i yaml <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/compose\/\">Docker Compose<\/a><\/noindex>, som \u00e4r en del av <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/\">Ansible<\/a><\/noindex> playbooken.<\/p>\n<p>                        <b class=\"spoiler_title\">postgres.yaml<\/b><\/p>\n<pre><code class=\"xml\">    - name: K\u00f6r beh\u00e5llare\n      docker_compose:\n        project_name: main-postgres\n        definition:\n          version: '3.7'\n          services:\n            p:\n              image: \"{{ postgres_version }}\"\n              container_name: postgresql\n              restart: alltid\n              volumes:\n                - \"{{ postgres_dir }}\/data:\/var\/lib\/postgresql\/data\"\n                - \"{{ postgres_dir }}\/postgres_init_scripts:\/docker-entrypoint-initdb.d\"\n              environment:\n                POSTGRES_PASSWORD: {{ postgres_pass }}\n                POSTGRES_USER: {{ postgres_user }}\n              ports:\n                - \"{{ postgres_ip }}:{{ postgres_port }}:5432\"\n              logging:\n                driver: \"loki\"\n                options:\n                  loki-url: \"{{ loki_url }}\"\n                  loki-batch-size: \"{{ loki_batch_size }}\"\n                  loki-retries: \"{{ loki_retries }}\"\n...\n<\/code><\/pre>\n<p>\nd\u00e4r loki_url: <noindex><a rel=\"nofollow\" href=\"http:\/\/kube-loki.example.domain\/loki\/api\/v1\/push\">kube-loki.example.domain\/loki\/api\/v1\/push<\/a><\/noindex> <\/p>\n<h4>M\u00e4tv\u00e4rden<\/h4>\n<p>\n Metrik samlas in fr\u00e5n PostgreSQL med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrouesnel\/postgres_exporter\">postgres_exporter<\/a><\/noindex> f\u00f6r <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex>. Forts\u00e4ttning av ovanst\u00e5ende fil <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/\">Ansible<\/a><\/noindex> playbooken.<\/p>\n<p>                        <b class=\"spoiler_title\">postgres.yaml<\/b><\/p>\n<pre><code class=\"xml\">...  \n            pexp:\n              image: \"wrouesnel\/postgres_exporter\"\n              container_name: pexporter\n              restart: om inte stoppad\n              environment:\n                DATA_SOURCE_NAME: \"postgresql:\/\/{{ postgres_user }}:{{ postgres_pass }}@p:5432\/postgres?sslmode=disable\"\n              ports:\n                - \"{{ postgres_ip }}:{{ postgres_exporter_port }}:9187\"\n              logging:\n                driver: \"json-file\"\n                options:\n                  max-size: \"5m\"\n...\n<\/code><\/pre>\n<p>F\u00f6r att g\u00f6ra namnen p\u00e5 externa stateful-tj\u00e4nster mer tydliga skriver vi dem via Endpoints.<\/p>\n<p>                        <b class=\"spoiler_title\">postgres-service.yaml<\/b><\/p>\n<pre><code class=\"xml\">apiVersion: v1\nkind: Endpoints\nmetadata:\n  name: postgres-exporter\nsubsets:\n  - addresses:\n      - ip: {{ .Values.service.postgres.ip }}\n    ports:\n      - port: {{ .Values.service.postgres.port }}\n        protocol: TCP\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: postgres-exporter\n  labels:\n    chart:  \"{{ .Chart.Name }}-{{ .Chart.Version | replace \"+\" \"_\" }}\"\nspec:\n  ports:\n    - protocol: TCP\n      port: {{ .Values.service.postgres.port }}\n      targetPort: {{ .Values.service.postgres.port }}\n<\/code><\/pre>\n<p>Konfiguration av Prometheus f\u00f6r att h\u00e4mta data fr\u00e5n postgres_exporter g\u00f6rs genom att redigera values i subchart.<\/p>\n<p>                        <b class=\"spoiler_title\">values.yaml<\/b><\/p>\n<pre><code class=\"xml\">scrape_configs:\n...\n  - job_name: postgres-exporter\n    static_configs:\n      - targets: \n         - postgres-exporter.applicationnamespace.svc.cluster.local:9187\n        labels:\n          alias: postgres\n...\n<\/code><\/pre>\n<p>F\u00f6r att visualisera de erh\u00e5llna data, installera den l\u00e4mpliga Dashboarden i<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\">Grafana<\/a><\/noindex> och konfigurera datak\u00e4llorna. Detta kan ocks\u00e5 g\u00f6ras via values i subchart Grafana.<\/p>\n<p>                        <b class=\"spoiler_title\">Hur det ser ut<\/b><br \/>\n                        <img decoding=\"async\" alt=\"\u00d6vervakning och loggning av externa tj\u00e4nster i Kubernetes-kluster\" src=\"\/wp-content\/uploads\/2020\/06\/01d9ced9bc50b730bf55f20f8de99daf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nJag hoppas att den h\u00e4r korta artikeln har hj\u00e4lpt dig att f\u00f6rst\u00e5 de grundl\u00e4ggande id\u00e9erna bakom denna l\u00f6sning och sparar tid n\u00e4r du konfigurerar \u00f6vervakning och loggning av externa tj\u00e4nster f\u00f6r Loki\/Prometheus i Kubernetes-klustret.<br \/>\n<br \/>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505968\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0441\u0435\u043c. \u042f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0432 \u0441\u0435\u0442\u0438 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0435 \u0432 Kubernetes. \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0439 Prometheus \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e stateful-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0421\u0423\u0411\u0414 PostgreSQL \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 Docker. \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":86201,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-86200","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0441\u0435\u043c. \u042f \u043d\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0441\u0435\u043c. \u042f \u043d\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-22T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-22T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00d6vervakning och loggning av externa tj\u00e4nster i Kubernetes-kluster | ProHoster","description":"God dag alla. Jag \u00e4r inte.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes | ProHoster","og:description":"\u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0441\u0435\u043c. \u042f \u043d\u0435.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/monitoring-i-logirovanie-vneshnih-servisov-v-klaster-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-22T11:42:20+00:00","article:modified_time":"2020-06-22T11:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"86200","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:21:08","updated":"2022-09-28 06:57:45","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/86200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=86200"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/86200\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/86201"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=86200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=86200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=86200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}