tag:crieit.net,2005:https://crieit.net/tags/%E5%BF%98%E5%82%99%E9%8C%B2/feed
「忘備録」の記事 - Crieit
Crieitでタグ「忘備録」に投稿された最近の記事
2021-03-30T21:34:08+09:00
https://crieit.net/tags/%E5%BF%98%E5%82%99%E9%8C%B2/feed
tag:crieit.net,2005:PublicArticle/16796
2021-03-30T21:29:49+09:00
2021-03-30T21:34:08+09:00
https://crieit.net/posts/RHEL-rsyslog-vROps-Framing-Error
【RHEL / vROps】rsyslogでvROpsからログを受信する際にFraming Errorメッセージが大量に出力される【解決】
<p>vROps(VMware vRealize Operations)のログを<br />
rsyslogで受信する設定をした際に、<br />
/var/log/messagesにFraming Errorメッセージが大量に出力される現象が発生したため、メモ</p>
<h1 id="動作環境"><a href="#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83">動作環境</a></h1>
<p>Red Hat Enterprise Linux 8.3 (Ootpa)<br />
Kernel: 4.18.0-240.el8.x86_64<br />
rsyslogd 8.1911.0-6.el8</p>
<h1 id="Framing Errorメッセージ"><a href="#Framing+Error%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8">Framing Errorメッセージ</a></h1>
<pre><code>Mar 25 11:21:41 servername rsyslogd[1511]: imtcp imtcp: Framing Error in received TCP message from peer: (hostname) vROpsserver, (ip) vROpsserver: delimiter is not SP but has ASCII value 10. [v8.1911.0-6.el8]
Mar 25 11:21:41 servername rsyslogd[1511]: imtcp imtcp: Framing Error in received TCP message from peer: (hostname) vROpsserver, (ip) vROpsserver: delimiter is not SP but has ASCII value 45. [v8.1911.0-6.el8]
Mar 25 11:21:41 servername rsyslogd[1511]: imtcp imtcp: Framing Error in received TCP message from peer: (hostname) vROpsserver, (ip) vROpsserver: delimiter is not SP but has ASCII value 58. [v8.1911.0-6.el8]
Mar 25 11:21:41 servername rsyslogd[1511]: imtcp imtcp: Framing Error in received TCP message from peer: (hostname) vROpsserver, (ip) vROpsserver: delimiter is not SP but has ASCII value 62. [v8.1911.0-6.el8]
</code></pre>
<p>Valueの数値は、10,45,58,62の4種類かな?<br />
メッセージが大量に出力されるため、/var/log/messagesがこのメッセージで埋まってしまう…</p>
<blockquote>
<p><strong>【Framing Errorメッセージについて】</strong><br />
rsyslogdが受信したメッセージの形式が不正であった場合に出力されるメッセージで<br />
メッセージ区切り文字が SP(space)ではなく ASCII 文字の value [xx] として受信したことを意味しているようです。</p>
</blockquote>
<h1 id="vROpsがoctet-counted framingを採用していることが原因"><a href="#vROps%E3%81%8Coctet-counted+framing%E3%82%92%E6%8E%A1%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%8E%9F%E5%9B%A0">vROpsがoctet-counted framingを採用していることが原因</a></h1>
<p>vROpsがoctet-counted framingを採用していることによるエラーとのことなので<br />
syslogサーバでOctetCountedFramingをオフにすればOK</p>
<h1 id="対応"><a href="#%E5%AF%BE%E5%BF%9C">対応</a></h1>
<p>rsyslog設定ファイルに、OctetCountedFramingを無効にする設定をする</p>
<pre><code># vi /etc/rsyslog.conf
## 修正前
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
## 修正後
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514" supportOctetCountedFraming="off")
</code></pre>
<p>rsyslogd再起動で設定を反映</p>
<pre><code># systemctl restart rsyslog
</code></pre>
ゆみお
tag:crieit.net,2005:PublicArticle/16773
2021-03-26T21:32:33+09:00
2021-03-28T14:53:12+09:00
https://crieit.net/posts/RHEL-crontab-logrotate
【RHEL】crontabにlogrotateコマンドを登録したのに実行されなかった【解決】
<p>カスタムで作ったログローテ設定ファイルを読み込んで<br />
任意の時間でログローテーションしたくて</p>
<p>crontab -e(/var/spool/cron/root)に<br />
logrotateコマンドを登録したら実行されなかったのでメモ</p>
<p>結果的には、logrotateコマンドをフルパスで指定することで解決しました。</p>
<h1 id="動作環境"><a href="#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83">動作環境</a></h1>
<p>Red Hat Enterprise Linux 8.3 (Ootpa)<br />
Kernel: 4.18.0-240.el8.x86_64<br />
logrotate 3.14.0</p>
<h1 id="cron設定"><a href="#cron%E8%A8%AD%E5%AE%9A">cron設定</a></h1>
<p>以下の設定でlogrotateコマンドをcrontabに登録</p>
<pre><code># crontab -l
0 1 * * * logrotate -f /root/rsyslog_custom.conf
</code></pre>
<p>したけど、なんだか動作してないっぽい</p>
<h1 id="ログ確認"><a href="#%E3%83%AD%E3%82%B0%E7%A2%BA%E8%AA%8D">ログ確認</a></h1>
<p>とりあえずログを確認</p>
<pre><code># tail /var/log/cron
Mar 26 10:55:01 servername CROND[86361]: (root) CMD (logrotate -f /root/rsyslog_custom.conf)
Mar 26 10:55:01 servername CROND[86338]: (root) CMDOUT (/bin/sh: logrotate: コマンドが見つかりません)
</code></pre>
<p>コマンドが見つからない?なんで??</p>
<h1 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h1>
<p>調べてみたら、ログイン時に読み込まれる環境変数と<br />
cron実行時に読み込まれている環境変数が異なるから、とのこと。</p>
<p>なるほど、PATHの変数の内容が違うのかな?</p>
<h1 id="検証"><a href="#%E6%A4%9C%E8%A8%BC">検証</a></h1>
<p>試しにcron実行されるときのPATHを確認</p>
<pre><code># crontab -e
0 1 * * * logrotate -f /root/rsyslog_custom.conf
## PATH変数を出力するコマンドを登録
0 11 * * * echo $PATH > /tmp/path.txt
</code></pre>
<p>cron実行される時のPATH</p>
<pre><code># cat /tmp/path.txt
/usr/bin:/bin
</code></pre>
<p>rootログイン時のPATH</p>
<pre><code># echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
</code></pre>
<p>logrotateコマンドのフルパス</p>
<pre><code># which logrotate
/usr/sbin/logrotate
</code></pre>
<p>なるほど、cron実行時のPATHに/usr/sbinがないから<br />
そりゃ実行できないよね…</p>
<h1 id="対応"><a href="#%E5%AF%BE%E5%BF%9C">対応</a></h1>
<p>フルパス指定でcron登録を修正</p>
<pre><code># crontab -l
0 1 * * * /usr/sbin/logrotate -f /root/rsyslog_custom.conf
</code></pre>
<p>実行されているか確認</p>
<pre><code># tail /var/log/cron
Mar 26 11:06:01 servername CROND[86677]: (root) CMD (/usr/sbin/logrotate -f /root/rsyslog_custom.conf)
</code></pre>
<p>動いた!</p>
<p>cronって今までシェルスクリプトの登録くらいしかしてなかったから<br />
環境変数違うなんて気がつかなかったな…笑</p>
ゆみお