<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Syslog on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog-0847c6.gitlab.io/tags/syslog/</link><description>Recent content in Syslog on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Fri, 24 Dec 2021 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/syslog/index.xml" rel="self" type="application/rss+xml"/><item><title>[Python] Docker コンテナ内のアプリのログをホストの Syslog に追加する</title><link>https://blog-0847c6.gitlab.io/posts/2021/12/24/docker-syslog/</link><pubDate>Fri, 24 Dec 2021 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2021/12/24/docker-syslog/</guid><description>&lt;p&gt;docker コンテナ内で動作している python アプリのログをホストの syslog に追加します。&lt;/p&gt;
&lt;p&gt;Ubuntu 20.04 で作業しましたが、rsyslog は最初からインストールされていました。&lt;/p&gt;
&lt;h2 id="概要"&gt;&lt;a href="#%e6%a6%82%e8%a6%81" class="header-anchor"&gt;&lt;/a&gt;概要
&lt;/h2&gt;&lt;p&gt;Python 標準の logging モジュールに syslog 出力用のハンドラ &lt;code&gt;SysLogHandler&lt;/code&gt; があるので、アプリ側ではそれを指定するだけで OK です。&lt;/p&gt;
&lt;p&gt;Syslog はホストに対して UDP でログを送信して追加します。&lt;br&gt;
理由は以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;docker コンテナ内でアプリを動かしているので、今後コンテナが増えたときコンテナごとに rsyslog を設定してやるのが面倒そう&lt;/li&gt;
&lt;li&gt;各コンテナのログを一箇所に集約したい&lt;/li&gt;
&lt;li&gt;syslog の記録には TCP or UDP のポート 514 が使用されるらしいが、&lt;code&gt;SysLogHandler&lt;/code&gt; では UDP しか対応していないよう&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rsyslog-の設定変更"&gt;&lt;a href="#rsyslog-%e3%81%ae%e8%a8%ad%e5%ae%9a%e5%a4%89%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;rsyslog の設定変更
&lt;/h2&gt;&lt;p&gt;UDP のポート514 でログを待ち受けるように設定を変更します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/rsyslog.conf&lt;/code&gt; を編集します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo gedit /etc/rsyslog.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下の２行のコメントを外します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;imudp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;imudp&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;514&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;変更後は再起動します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo systemctl restart rsyslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="アプリ側の実装"&gt;&lt;a href="#%e3%82%a2%e3%83%97%e3%83%aa%e5%81%b4%e3%81%ae%e5%ae%9f%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;アプリ側の実装
&lt;/h2&gt;&lt;p&gt;ログに関する設定を &lt;code&gt;logging.yaml&lt;/code&gt; に切り出しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2021/12/python_21.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2021/12/python_21.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;その前提のうえで、以下のように指定するだけでログが UDP で送信されるようになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; level: DEBUG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; handlers: [syslog]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;handlers:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; syslog:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; class: logging.handlers.SysLogHandler
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; formatter: syslog_format
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; address: [&amp;#39;host.docker.internal&amp;#39;, 514]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; #address: &amp;#39;/dev/log&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; level: INFO
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;formatters:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; syslog_format:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; format: &amp;#39;appname: %(module)s %(message)s&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;IPアドレスについては、docker コンテナからホストのIPアドレスを参照する必要があるので &lt;code&gt;host.docker.internal&lt;/code&gt; を指定します。&lt;br&gt;
（localhost はコンテナ自身を指すので使えない)&lt;br&gt;
ちなみに &lt;code&gt;host.docker.internal&lt;/code&gt; はもともと Windows と Mac でしか使えませんでしたが、最近 Linux でも使えるようになったそうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/skobaken/items/03a8b9d0e443745862ac" target="_blank" rel="noopener"
 &gt;https://qiita.com/skobaken/items/03a8b9d0e443745862ac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これ使えなかったら直接IPアドレスを指定しないといけなくなり、ホストのIPアドレスが変わるたびに修正しないといけなくてマジ困ります。
ってかこれを知るまでずっと困ってました。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/Esfahan/items/7888914dca0e8d23eac3" target="_blank" rel="noopener"
 &gt;https://qiita.com/Esfahan/items/7888914dca0e8d23eac3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.alexgittings.com/capturing-syslog-with-the-tig-stack/" target="_blank" rel="noopener"
 &gt;https://blog.alexgittings.com/capturing-syslog-with-the-tig-stack/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Syslog を Telegraf に送り、Grafana で閲覧できるようにする</title><link>https://blog-0847c6.gitlab.io/posts/2021/12/20/syslog-telegraf-grafana/</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2021/12/20/syslog-telegraf-grafana/</guid><description>&lt;p&gt;以下に Syslog 用のテンプレートと解説があるので簡単にできるかと思ったんですが、結構苦労しました・・・。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/12433" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/12433&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="概要"&gt;&lt;a href="#%e6%a6%82%e8%a6%81" class="header-anchor"&gt;&lt;/a&gt;概要
&lt;/h2&gt;&lt;p&gt;ホストの Syslog から Telegraf にログを送り、Telegraf が InfluxDB に保存し、Grafana が InfluxDB から読み込んで可視化します。&lt;/p&gt;
&lt;p&gt;Telegraf、InfluxDB、Grafana は全て docker-compose で動かしています。&lt;br&gt;
これについては以下の記事で書いているので省略します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2021/12/telegraf-influxdb-garafana.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2021/12/telegraf-influxdb-garafana.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記記事からの変更点を以下に記述します。&lt;/p&gt;
&lt;h2 id="rsyslog-の設定"&gt;&lt;a href="#rsyslog-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;rsyslog の設定
&lt;/h2&gt;&lt;p&gt;まずは Syslog から Telegraf にログを送信するように設定します。&lt;br&gt;
&lt;code&gt;/etc/rsyslog.conf&lt;/code&gt; を編集します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo gedit /etc/rsyslog.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下の設定を追加します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;WorkDirectory&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;spool&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rsyslog&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ActionQueueType&lt;/span&gt; &lt;span class="n"&gt;LinkedList&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ActionQueueFileName&lt;/span&gt; &lt;span class="n"&gt;srvrfwd&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ActionResumeRetryCount&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ActionQueueSaveOnShutdown&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ModLoad&lt;/span&gt; &lt;span class="n"&gt;imudp&lt;/span&gt; &lt;span class="c1"&gt;#loads the udp module &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;UDPServerAddress&lt;/span&gt; &lt;span class="n"&gt;localhost&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;UDPServerRun&lt;/span&gt; &lt;span class="mi"&gt;514&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;*.*&lt;/span&gt; &lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6514&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;RSYSLOG_SyslogProtocol23Format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;rsyslog を再起動します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo systemctl restart rsyslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="telegraf-の設定"&gt;&lt;a href="#telegraf-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;Telegraf の設定
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;telegraf.conf&lt;/code&gt; に以下の設定を追加します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[[inputs.syslog]]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server = &amp;#34;tcp://0.0.0.0:6514&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Syslog から TCP ポート 6514 で受信するように設定していますが、docker で動かしているので &lt;code&gt;localhost&lt;/code&gt; を指定すると上手く動作しません。&lt;br&gt;
とりあえず &lt;code&gt;0.0.0.0&lt;/code&gt; を指定しましたが、もしかしたら &lt;code&gt;host.docker.internal&lt;/code&gt; とかでもいけるのかもしれません（未確認）。&lt;/p&gt;
&lt;h2 id="docker-composeyaml-の変更"&gt;&lt;a href="#docker-composeyaml-%e3%81%ae%e5%a4%89%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;docker-compose.yaml の変更
&lt;/h2&gt;&lt;p&gt;ポート 6514 を使用できるようにします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; telegraf:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; container_name: telegraf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image: telegraf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 6514:6514
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;docker コンテナを再起動します。&lt;/p&gt;
&lt;h2 id="grafana-の設定"&gt;&lt;a href="#grafana-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;Grafana の設定
&lt;/h2&gt;&lt;p&gt;以下のページからダッシュボードの JSON ファイルをダウンロードしてインポートするだけです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/12433" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/12433&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これで以下のようなダッシュボードが完成します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="338px" data-flex-grow="140" height="320" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2021/12/20/syslog-telegraf-grafana/01.webp" width="451"&gt;&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.htkyama.org/rsyslog_grafana" target="_blank" rel="noopener"
 &gt;https://blog.htkyama.org/rsyslog_grafana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/12433" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/12433&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/haccht/items/82e8694c57202135ae5e" target="_blank" rel="noopener"
 &gt;https://qiita.com/haccht/items/82e8694c57202135ae5e&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>