tag:crieit.net,2005:https://crieit.net/tags/RHEL8/feed 「RHEL8」の記事 - Crieit Crieitでタグ「RHEL8」に投稿された最近の記事 2021-03-30T21:34:08+09:00 https://crieit.net/tags/RHEL8/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> ゆみお