カールを使用してWebページでヘルスチェックを実行する

カールを使用してWebページでヘルスチェックを実行する

特定のURLを呼び出してサービスのステータスを確認したいと思います。最も簡単な解決策は、cronを使用して毎分チェックすることです。エラーが発生した場合は、cronから電子メールを送信します。

これを達成するためにcUrlを試しましたが、エラーが発生したときにのみメッセージを出力することはできませんでした。出力を/ dev / nullに送信しようとすると、進行状況レポートが印刷されます。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5559  100  5559    0     0   100k      0 --:--:-- --:--:-- --:--:--  106k

カールオプションを見てみましたが、成功したときに沈黙し、エラー時にノイズを発生させようとしている状況に適したものが見つかりませんでした。

私が望むことを行うためにカールを取得する方法や考慮すべき他のツールがありますか?

答え1

何について-sSf?マニュアルページから:

  -s/--silent
     Silent or quiet mode. Do not show progress meter or error messages.  
     Makes Curl mute.

  -S/--show-error
     When used with -s it makes curl show an error message if it fails.

  -f/--fail
     (HTTP)  Fail silently (no output at all) on server errors. This is mostly
     done to better enable scripts etc to better deal with failed attempts. In
     normal  cases  when a HTTP server fails to deliver a document, it returns
     an HTML document stating so (which often also describes  why  and  more).
     This flag will prevent curl from outputting that and return error 22.

     This method is not fail-safe and there are occasions where non-successful
     response codes will  slip  through,  especially  when  authentication  is
     involved (response codes 401 and 407).

たとえば、

curl -sSf http://example.org > /dev/null

答え2

サイトが生きていることを確認する最も簡単な方法は、次の方法を使用することです。

curl -Is http://www.google.com | head -n 1

が返されますHTTP/1.1 200 OK。返された結果が出力と一致しない場合は、助けを求めてください。

答え3

カールからネットワークタイミング統計をキャプチャできます。要求/応答サイクル各ステップの待ち時間は、状態を確認するのに役立ちます。

$ URL=https://example.com
$ curl "$URL" -s -o /dev/null -w \
> "response_code: %{http_code}\n
> dns_time: %{time_namelookup}
> connect_time: %{time_connect}
> pretransfer_time: %{time_pretransfer}
> starttransfer_time: %{time_starttransfer}
> total_time: %{time_total}
> "
response_code: 200

dns_time: 0.029
connect_time: 0.046
pretransfer_time: 0.203
starttransfer_time: 0.212
total_time: 0.212

答え4

Curlには非常に具体的な終了ステータスコードがあります。
このコードを確認してください。

#!/bin/bash

##name: site-status.sh

FAIL_CODE=6

check_status(){
    LRED="\033[1;31m" # Light Red
    LGREEN="\033[1;32m" # Light Green
    NC='\033[0m' # No Color


    curl -sf "${1}" > /dev/null

    if [ ! $? = ${FAIL_CODE} ];then
        echo -e "${LGREEN}${1} is online${NC}"
    else
        echo -e "${LRED}${1} is down${NC}"
    fi
}


check_status "${1}"

使用法:

$ site-status.sh example.com

結果:

$ example.com is online

メモ:

スクリプトはサイトを確認できますが、確認します。

ウェブサイトが機能するかどうかに興味がある場合は、このコードが役に立ちます。
ただし、if/else ブロックを一部変更すると、必要に応じて他のステータスコードを簡単にテストできます。

関連情報