URLに相当するtail -f


10

アプリケーションのログファイルを監視したいのですが、ローカルでは機能しませんが、SaaSプラットフォーム上で、HTTPおよびWebDAVを介して公開されています。したがって、URLに対して機能するtail -fに相当するものは、私にとって非常に効果的です。

PS HTTP経由でリモートファイルを監視できる他のツールを知っている場合は、それも役立ちます。ありがとう


1
リモートサーバーではプレーンテキストとして表示されますか、それともhtmlとして表示されますか?
terdon

特定の形式のプレーンテキスト:[timestamp] Error_name .....次に、grepでフィルタリングするつもりです
munch

を使用できますwget -N http://somewhere/something。これは、以前にダウンロードしたファイルよりも新しいファイルをダウンロードするか、wget -O - http://somewhere/somethingファイルをstdoutにリダイレクトするために使用します。
週の

回答:


11

これには特定のツールがあるかもしれませんが、wgetを使用して行うこともできます。ターミナルを開き、次のコマンドを実行します:

while(1); do \
    sleep 2; \
    wget -ca -O log.txt -o /dev/null http://yoursite.com/log; \
done

これにより、ログファイルが2秒ごとにダウンロードされ、保存されlog.txtているものに出力が追加され-cます(つまり、ダウンロードが続行さ-aれ、指定されたファイル名に出力が追加されます)。は-oエラーメッセージをにリダイレクトします/dev/null/

これで、log.txtのローカルコピーが作成され、実行できますtail -f

tail -f log.txt 

davfs2を使用してwebDAVインターフェイスと統合し、通常のファイルのように使用できることがわかりました。これは私が本当に期待していたことです。しかし、あなたの解決策はよりシンプルで実際に機能します
2012

すべてが「log.txt」ではなく「log」ファイルに保存されていることがわかりました。私の場合、これは機能します:wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek

@munch davfs2はうまく機能しません。私の場合tail -f、ディレクトリの更新をサーバーに積極的に要求する他のプロセスがない限り、ファイルの変更は更新されないことがわかりました(プレーンでls十分のようです)。問題はtail -finotifyに依存しており、inotifyはdavfs2で動作しないようです。
jesjimher

@jesjimher tailはinotifyに依存しません。単にファイルを読み取り、シークして再度読み取ります。davfsでうまく機能しない場合、それはdavfs自体がどのように機能するかにかかっています。おそらく、何かがアクティブにディレクトリを読み取っているときにのみ情報を更新しtail、ファイルを開いたままにしているため、トリガーされません。またはそれらの線に沿って何か。
terdon 2018年

私がテールのコードを理解している限り、それは依存関係ではありませんが、利用可能であればinotifyを使用し、システムでinotifyが利用できない場合にのみポーリング動作に頼ります。davfsは、明示的な要求を行わないとファイルがいつ変更されたかを認識できないため、他のプロセスがディレクトリの更新を要求するまで、inotifyイベントは生成されません。inotifyが利用可能であっても、テールがポーリングを強制する何らかの方法を備えていればいいのですが、そのようなパラメータは見つかりませんでした。
jesjimher

3

私はここで同じ質問に答えましたが、URLを引数として使用する完全なシェルスクリプトを使用していますtail -f。これがその回答のコピーです。


これはそれを行います:

#!/bin/bash

file=$(mktemp)
trap 'rm $file' EXIT

(while true; do
    # shellcheck disable=SC2094
    curl --fail -r "$(stat -c %s "$file")"- "$1" >> "$file"
done) &
pid=$!
trap 'kill $pid; rm $file' EXIT

tail -f "$file"

Webサーバー上ではあまりフレンドリーではありません。あなたは置き換えることができtruesleep 1より少ないリソースを大量に消費されることを。

のように、出力が完了したときでも、出力の監視が完了tail -fした^Cときに必要です。


0

範囲オプション付きのカールと時計を組み合わせて使用​​すると、これを実現できます。

レンジ

HTTP 1.1はバイト範囲を導入しました。これを使用して、クライアントは指定されたドキュメントの1つ以上のサブパートのみを取得するように要求できます。Curlはこれを-rフラグでサポートしています。

watch -n <interval> 'curl -s -r -<bytes> <url>'

例えば

watch -n 30 'curl -s -r -2000 http://yoursite.com/log'

これにより、ログの最後の2000バイトが30秒ごとに取得されます。

注:自己署名httpsの場合は、-insecure curlオプションを使用してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.