名称
goaccess -
高速なwebログ解析器と対話的な閲覧器
処方
goaccess [ファイル名]
[オプション...]
[-c][-M][-H][-q][-d][...]
説明
goaccess
GoAccessはオープンソースの実時間webログ解析器と対話的な閲覧器を兼ねており、
*nixシステムの端末やブラウザ上で走ります。
サーバーレポートで思うがままにデータの可視化を行う必要があるシステム管理者のために、
高速で価値のあるHTTPの統計情報を提供します。
GoAccessは指定されたwebログファイルを解析しX端末にデータを出力します。
含まれている機能は以下です:
- 一般的な統計:
- このパネルにはいくつかの指標の概要があります。
妥当ないし不当なリクエストの数、
データセットの解析所要時間、
正味訪問者数、
リクエストされたファイル、
静的ファイル(CSS、ICO、JPGなど)のHTTPリファラ、
404、
そして解析されたログファイルの大きさ、
さらに帯域幅の消費量といったものです。
- 正味訪問者
- このパネルにはヒット数、正味訪問者、日次累積帯域幅といった指標が示されます。
- おまけとして日付での指定は--date-spec=hrを使って時単位に設定することにより、
05/Jun/2016:16のような日付を表示できます。
もしくは分単位にすることで05/Jun/2016:16:59になります。
時単位ないし分単位で日次トラフィックを把握したいときは威力を発揮します。
- リクエストされたファイル
- このパネルにはwebサーバーにリクエストされた(静的でない)ファイルのほとんどが表示されます。
ヒット数、正味訪問者、比率と共に、使用された累積帯域幅、プロトコル、リクエストメソッドが示されます。
- リクエストされた静的ファイル
- JPG、CSS、SWF、JS、GIF、PNGファイル種のような頻出の静的ファイルを一覧にしつつ、
上のリクエストされたファイルのパネルと同じ指標も備わります。
静的ファイルの種類を設定ファイルに加えることができます。
- 404ないしNot Found
- 前述のリクエストパネルと同じ指標を表示します。
ただしこちらはサーバーで見当たらなかったり、
一般に404ステータスコードとして知られているデータが含まれます。
- ホスト
- このパネルにはホスト自体についての詳細情報が載っています。
これにより容易に攻撃的なクローラーに焦点を当てたり、
帯域幅を貪るホストを同定することができます。
パネルを拡大することでホストのリバースDNS探知結果や身元の国家や、
市といった追加情報を表示できます。
-a引数が有効であれば所望のIPアドレスを選択してエンターを打つことで、
ユーザーエージェントを表示させられます。
- オペレーティングシステム
- このパネルではサーバーをヒットするときにホストがどのオペレーティングシステムを用いたかが報告されます。
それぞれのオペレーティングシステムの可能な限り最も細かいバージョンが呈示されます。
- ブラウザ
- このパネルにはサーバーをヒットした際にホストがどのブラウザを用いたかを報告します。
それぞれのブラウザの可能な限り最も細かいバージョンが呈示されます。
- 訪問時刻
- このパネルには時単位のレポートが表示されます。
このオプションでは24個のデータ点が表示され、1つにつき1日のうちの各1時間が充てられます。
- おまけとして、時指定は--hour-spec=minを使うことで時単位の10分の1に設定することができ、
時間は16:4として表示されます。
これはサーバーのトラフィックのピークに焦点を当てたいときに効果を発揮します。
- 仮想ホスト
- このパネルにはアクセスログから解析された全ての各仮想ホストが表示されます。
このパネルはログ書式文字列中に%vが使われたときに表示されます。
- リファラのURL
- 問題のホストが他のリソースを介してアクセスされた場合、
もしくは別のホストからリンクないし転換された場合、
このパネル中に参照元のURLが呈示されます。
有効にするには設定ファイル中の`--ignore-panel`を参照してください。
既定では無効になっています。
- 参照サイト
- このパネルにはURL全体ではなくホスト部分のみが表示されます。
このURLはリクエストの出自です。
- キーフレーズ
- サーバーに導いたGoogle検索、Googleキャッシュ、
Google翻訳で使われたキーフレーズが報告されます。
現時点ではHTTPを介したGoogle検索問い合せのみに対応しています。
有効にするには設定ファイル中の`--ignore-panel`を参照してください。
既定では無効になっています。
- 地理的位置
- IPアドレスが地理的にどこに位置しているかを定められます。
統計は大陸と国家に細分化されます。
GeoLocation対応とともにコンパイルする必要があります。
- HTTPステータスコード
- HTTPリクエストに対する数値的なステータスコードの値です。
- ASN
- このパネルにはGeoIP2と旧式のデータベース用にASN
(Autonomous System Numbers)
のデータが表示されます。
悪意のあるトラフィックを検知しそれに伴ってブロックするのに優れています。
- リモートユーザー(HTTP認証)
- HTTP認証により定められるような、文書をリクエストする人物の利用者IDがこれです。
文書がパスワードで保護されていなければ前のものと同様にこの部分は"-"になります。
このパネルはログ書式変数中に%eが与えられていなければ有効になりません。
- キャッシュ状態
- サーバーでキャッシュを使っているとき、
リクエストがキャッシュされたりキャッシュからリクエストに応答したりしているかどうかを、
知りたくなるときがくるかもしれません。
このパネルはサーバーが供したオブジェクトのキャッシュ状態を示します。
このパネルはログ書式変数中で%Cが与えられない限り有効にはされません。
状態は`MISS`、`BYPASS`、`EXPIRED`、`STALE`、`UPDATING`、`REVALIDATED`、`HIT`のいずれかです。
- MIME種別
- このパネルには割り当てられたメディア種別(正式にはMIME種別として知られます)とメディア副種別が指定されており、
その下に一覧になっています。
このパネルはログ書式変数中に%Mが与えられていない限り有効になりません。
詳細は
https://www.iana.org/assignments/media-types/media-types.xhtml
を参照してください。
- 暗号化設定
- このパネルには暗号スート間で使用されたSSL/TLSプロトコルが示されます。
このパネルはログ書式変数中で%Kが与えられていない限り有効ではありません。
補足:おまけで、設定された際には、
全てのパネルへリクエストに対応するのに掛かった平均時間を表示することができます。
容量
GoAccessで使うことができる容量オプションは3つあります。
環境と要件により選択は変わってきます。
- 既定のハッシュテーブル
- インメモリ容量はデータセットの大きさを利用できる物理記憶容量に制限するコストと引き換えに、
よりよいパフォーマンスが得られます。
GoAccessはインメモリハッシュテーブルを使用します。
とても多いメモリ使用でかなり良いパフォーマンスを発揮します。
この容量はディスク上の永続性に対応します。
コンパイル時の設定
GoAccessのコンパイル時の設定ではいくつかのオプションを使うことができます。
完全な最新の設定オプションの一覧については./configure
--helpを走らせてください。
- --enable-debug
- デバッグシンボル有りでコンパイルし、
コンパイラの最適化を切ります。
- --enable-utf8
- 全角文字対応有りでコンパイルします。
Ncurseswが必要です。
- --enable-geoip=<legacy|mmdb>
- GeoLocation対応有りでコンパイルします。
MaxMindのGeoIPが必要です。
legacyは元来のGeoIPデータベースを使用します。
mmdbは改善されたGeoIP2データベースを使用します。
- --with-getline
- 4096の固定大バッファを使う代わりに、フルラインリクエストを解析するために動的にラインバッファを拡張します。
- --with-openssl
- WebSocketサーバー用にGoAccessをOpenSSL対応付きでコンパイルします。
オプション
以下のオプションはコマンドに与えたり設定ファイルで指定したりできます。
設定ファイルで指定された場合、長いオプション名は--を前に付けず、等号=を使わずに使用する必要があります。
ログ、日付、時刻の書式
- --time-format=<時刻書式>
- 時刻書式変数は空白1つ分に続いて、定義済み書式名(後述のオプションを参照)ないし通常の文字と特殊書式指定子のあらゆる組み合わせのいずれかを含むログ書式時刻を指定します。
- 全てパーセント符号
(%) から始まります。 `man
strftime`を参照してください。
%Tや%H:%M:%Sといったものです。
- なお、タイムスタンプがマイクロ秒で与えられているならば%fは時刻書式として用いられねばなりません。
タイムスタンプがミリ秒で与えられているならば%*は時刻書式として用いられねばなりません。
- --date-format=<日付書式>
- 日付書式変数は空白1つに続き、定義済み書式名(後述のオプションを参照)ないし通常の文字と特殊な書式指定子のあらゆる組合せを含むログ書式時刻を指定します。
- 全てパーセント (%)
符号から始まります。
`man
strftime`を参照してください。
%Y-%m-%dといったものです。
- タイムスタンプがマイクロ秒で与えられているならば%fが日付書式として使われなければなりません。
タイムスタンプがミリ秒で与えられているならば%*が日付書式として使われなければなりません。
- --datetime-format=<日時書式>
- 日付と時刻の書式について、
2つの変数が単一のオプションに組み合わさったものです。
これによりリクエストからタイムゾーンを取得し、
出力用に他のタイムゾーンに変換することができます。
--tz=<タイムゾーン>を参照してください。
- 全てパーセント (%)
符号から始まります。
`man
strftime`を参照してください。
例として%d/%b/%Y:%H:%M:%S
%zを挙げます。
- なお--datetime-formatが使われている場合、日付と時刻のフィールドを表現するためにログ書式変数に%xが渡されなければなりません。
- --log-format=<ログ書式>
- ログ書式変数は空白1つないしタブ区切り用の\etに続いてログ書式文字列を指定します。
なお書式中に空白があった場合、文字列は単一ないし二重引用符で囲まれていなくてはなりません。
内部の引用符はエスケープされている必要があります。
- 生のログ、日付、時刻書式を指定するのに加えて、
便宜上以下の定義済みログ書式名から、
どれでもログ、日付、時刻書式変数に与えることができます。
GoAccessでは、
ある変数にある定義済みの名前を、
別の変数に別の定義済みの名前を、
というように扱うこともできます。
-
COMBINED - Combined Log Format
VCOMBINED -
仮想ホスト付きCombined Log
Format
COMMON - Common Log Format
VCOMMON - 仮想ホスト付きCommon
Log Format
W3C - W3C Extended Log File Format
SQUID - Native Squid Log Format
CLOUDFRONT - Amazon CloudFront Web Distribution
CLOUDSTORAGE - Google Cloud Storage
AWSELB - Amazon Elastic Load Balancing
AWSS3 - Amazon Simple Storage Service (S3)
AWSALB - Amazon Application Load Balancer
CADDY -
CaddyのJSON構造形式(local/info形式)
TRAEFIKCLF -
TraefikのCLFフレーバー
- 補足:一般に、空白文字、コンマ、パイプ、引用符、中括弧を含む値は、引用符で囲む必要があります。内部の引用符はエスケープしなければなりません。
- 補足:データをGoAccessにパイプで流し込むときはログ、日付、時刻設定ダイアログは質問されないので、予め設定ファイルかコマンドラインで定義しておく必要があります。
- 補足:GoAccessでの既定のCADDYの形式は、「local/info」形式です。それでも、必要であれば、独自のGoAccessのログ形式を活用して、特定の構成に合致するようにする選択肢があります。
利用者用対話的オプション
- -c --config-dialog
- プログラムの開始時にログ、日付、時刻の設定窓を開きます。
cursesが初期化されているとき限定です。
- -i --hl-header
- 活性化された端末パネルを色付けします。
- -m --with-mouse
- 主な端末ダッシュボードでマウス対応を有効にします。
- ---color=<前景:背景[属性,
パネル]>
- 端末出力用の独自の色を指定します。
Color Syntax
定義 空白またはタブ
前景色#:背景色#
[属性,パネル]
FG# = 前景色 [-1...255](-1 =
端末既定の色)
BG# = 背景色 [-1...255](-1 =
端末既定の色)
おまけとして色属性を適用することができます(複数の属性はコンマ区切になります)。
例えばbold、underline、normal、reverse、blinkです。
必要に応じてパネル毎に独自の色を適用することができます。
つまりリクエストパネルの指標は色Aのものにしつつ、
ブラウザパネルの同じ指標は色Bのものにする、といったことができます。
利用できる色の定義:
COLOR_MTRC_HITS
COLOR_MTRC_VISITORS
COLOR_MTRC_DATA
COLOR_MTRC_BW
COLOR_MTRC_AVGTS
COLOR_MTRC_CUMTS
COLOR_MTRC_MAXTS
COLOR_MTRC_PROT
COLOR_MTRC_MTHD
COLOR_MTRC_HITS_PERC
COLOR_MTRC_HITS_PERC_MAX
COLOR_MTRC_VISITORS_PERC
COLOR_MTRC_VISITORS_PERC_MAX
COLOR_PANEL_COLS
COLOR_BARS
COLOR_ERROR
COLOR_SELECTED
COLOR_PANEL_ACTIVE
COLOR_PANEL_HEADER
COLOR_PANEL_DESC
COLOR_OVERALL_LBLS
COLOR_OVERALL_VALS
COLOR_OVERALL_PATH
COLOR_ACTIVE_LABEL
COLOR_BG
COLOR_DEFAULT
COLOR_PROGRESS
カラースキームの例は設定ファイルを参照してください。
- --color-scheme=<1|2|3>
- カラースキームから選択します。
1は既定の灰色のスキームです。
2は緑色のスキームです。
3はMonokaiのスキームです(端末が256色に対応しているときのみ現れます)。
- --crawlers-only
- クローラー(ボット)のみ解析と表示を行います。
- --html-custom-css=<自前のCSSファイルへのパス>
- HTMLレポートで読み込まれる自前のCSSファイルパスを指定します。
- --html-custom-js=<自前のJavaScriptファイルへのパス>
- HTMLレポートで読み込まれる自前のJSファイルパスを指定します。
- --html-report-title=<題名>
- HTMLレポートページに題名とヘッダを設定します。
- --html-refresh=<秒数>
- HTMLレポートをX秒毎に再描画します。
値は1から60秒の間でなくてはなりません。
既定ではHTMLレポートを1秒毎に再描画するように設定されています。
- --html-prefs=<JSON>
- HTMLレポートの既定の設定を加えます。
HTML設定を含む妥当なJSONオブジェクトを与えてください。
それぞれのパネルプロットを自前のものにすることができます。
以下の例をご覽ください。
- 補足:渡すJSONオブジェクトは1行のJSON文字列である必要があります。
例えば次の通りです。
-
--html-prefs='{"theme":"bright","perPage":5,"layout":"horizontal","showTables":true,"visitors":{"plot":{"chartType":"bar"}}}'
- --json-pretty-print
- タブと改行を使ってJSON出力の書式を整えます。
- 補足:WebSocketのペイロードが遥かに増大するため、
実時間HTMLレポートを出力する際は推奨されません。
- --max-items=<数>
- パネル毎に表示する項目の最大数。
最大値は1からnまでの間にできます。
- 補足:CSV及びJSON出力のみでパネル毎の既定値の366
(実時間HTMLレポートでは50)項目より大きい最大数が許されます。
- --no-color
- 色付きの出力にします。
これは彩色に対応していない端末では既定の出力です。
- --no-column-names
- 端末の出力で列名を書き入れません。
既定ではパネル毎にそれぞれの使える指標について列名が表示されます。
- --no-csv-summary
- CSVの出力で指標の概要を無効にします。
- --no-progress
- 進行中の指標
[リクエスト合計/毎秒リクエスト]
を無効にします。
- --no-tab-scroll
- タブが押下されていたり、
パネルが数字のキーを使って選択されていたりするときは
パネルを通じてのスクロールを無効にします。
- --no-html-last-updated
- HTMLの生成されたレポート中に表示される最後に更新されたフィールドが現れないようにします。
- --no-parsing-spinner
- 進行中の指標とスピナーの解析を表示しません。
- --tz=<timezone>
- レポートの日付、時刻データを与えられたタイムゾーンで出力します。
正統なタイムゾーン名を使うことに注意してください。
例えばEurope/BerlinやAmerica/ChicagoやAfrica/Cairoといったようにです。
不正なタイムゾーン名が与えられると出力はGMTになります。
日付、時刻書式で適切にタイムゾーンを指定するには--datetime-formatを参照してください。
サーバーオプション
補足:
生の実時間データがもたらされるのはWebSocketサーバーだけです。
WebServer自体ではありません。
レポートのHTMLファイルにアクセスするには、やっぱり自前のHTTPサーバーが必要になります。
生成されたレポートをドキュメントルートディレクトリに置いてブラウザでHTMLファイルを開いてください。
ブラウザはここでセットアップできるws-serverへの別のWebSocket接続を開いて、
ダッシュボードを更新された状態に保つことができます。
- --addr
- サーバーに束縛するIPアドレスを指定します。
指定しなければ0.0.0.0に束縛します。
- 大抵はアドレスを指定する必要はないのですが、
意図的にサーバー内で異なるアドレスにサーバーを束縛したいときはその限りではありません。
- --daemonize
- GoAccessをデーモンとして走らせます(--real-time-htmlが有効になっているときのみ)。
- 補足:GoAccessの設定全体を通じて絶対パスを使うことは大切です。
- --user-name=<利用者名>
- GoAccessを特定のユーザーとして走らせます。
- 補足:ユーザーないしユーザーのグループが、
入出力ファイルやその他に必要なファイルにアクセスできることを確かめておくことは大事です。
ユーザーが属する他のグループは無視されます。
そういったわけで、
ユーザーがSSL証明書にアクセスできることはそうそうないでしょうから、
GoAccessはSSLプロキシの背後で走らせることをお勧めします。
- --origin=<URL>
- クライアントがWebSocketハンドシェイクで必ず指定されたオリジンヘッダーを送るようにします。
- --pid-file=<GoAccessのpidファイルへのパス>
- --daemonizeオプションと一緒に使ったときにデーモンのPIDをファイルに書き込みます。
- --port=<ポート>
- 使うポートを指定します。
既定ではGoAccessのWebSocketサーバーは7890ポートで待ち受けます。
- --real-time-html
- 実時間HTML出力を有効にします。
- GoAccessは自前のWebSocketサーバーを使ってサーバーからクライエントへのデータを送信します。
WebSocketサーバーの仕組みの詳細については
http://gwsocket.io
を参照してください。
- --ws-url=<[scheme://]url[:port]>
- WebSocketサーバーが応答するURLです。
これはクライアント側でWebSocket構築子に与えられるURLです。
- おまけとしてWebSocketのURIスキームを指定することができます。
暗号化されていなかったりされていたりするws://やwss://といったものです。
例:wss://goaccess.io
- GoAccessがプロキシの背後で走っている場合、
ホストにコロンとポートを続けて指定することによって、
クライアント側で異なるポートに接続するように設定することができます。
例えばgoaccess.io:9999です。
- 既定では生成されたレポートのホスト名に接続を試みます。
GoAccessがリモートサーバーで走っている場合、リモートサーバーのホストはここで指定されるべきです。
また、妥当なホストになっていてHTTPアドレスになって「いない」ことを必ず確認してください。
- --ping-interval=<秒数>
- 指定された秒数の間隔でWebSocketの死活監視を有効にします。
これにより切断されて放置されたままの接続を防ぐことができます。
- --fifo-in=<ファイルへのパス>
- 名前付きパイプ (FIFO)
を作り、与えられたファイルパスから読むようにします。
- --fifo-out=<ファイルへのパス>
- 名前付きパイプ (FIFO)
を作り、与えられたファイルパスに書き込むようにします。
- --ssl-cert=<証明書.crt>
- TLS/SSL証明書へのパスです。
GoAccessでTLS/SSL対応を有効にするためには--ssl-certと--ssl-keyが使用されていることが必要です。
--with-opensslを使ってconfigureしたときに限定されます。
- --ssl-key=<秘密鍵.key>
- TLS/SSL秘密鍵へのパスです。
GoAccessでTLS/SSL対応を有効にするためには、--ssl-certと--ssl-keyが使用されていることが必要です。
--with-opensslを使ってconfigureしたときに限定されます。
解析オプション
- -a --agent-list
- ホスト毎のユーザーエージェントの一覧を有効にします。
高速な解析の上ではこのフラグを有効にしないでください。
- -d
--with-output-resolver
- HTMLないしJSON出力におけるIPリゾルバを有効にします。
- -e
--exclude-ip=<IPまたはIPの範囲>
- IPv4やIPv6を計上の対象から除外します。
アクセスログのデータ処理中でのみ適用でき、永続化されたデータは除外されません。
範囲についても、IPの間にダッシュを使う(開始-終了)ことで含められます。
- 例:
exclude-ip 127.0.0.1
exclude-ip 192.168.0.1-192.168.0.100
exclude-ip ::1
exclude-ip 0:0:0:0:0:ffff:808:804-0:0:0:0:0:ffff:808:808
- -j --jobs=<1-6>
- これは、プログラムの実行時に使われる並列処理スレッド数を指定します。ログデータを解析するときの並行性の度合いを決定し、複数の作業を同時に並列処理することができるようになります。既定では1スレッドです。利用できるハードウェア資源に基づいてジョブ数を設定するのが一般的です。例えば、CPUコア数です。
- -H
--http-protocol=<yes|no>
- HTTPリクエストのプロトコルを設定したり外したりします。
こうすることによりリクエストされたプロトコルと実際のリクエストが含まれたリクエストキーが作られるようになります。
- -M
--http-method=<yes|no>
- HTTPリクエストのメソッドを設定したり外したりします。
これによりリクエストのメソッドと実際のリクエストを含むリクエストキーが作られるようになります。
- -o
--output=<ファイルへのパス.[json|csv|html]>
- 与えられた以下のファイルと対応する出力形式用の拡張子のうちの1つに標準出力への出力を書き込みます。
-
/path/file.csv - Comma-separated values (CSV)
/path/file.json - JSON (JavaScript Object Notation)
/path/file.html - HTML
- -q --no-query-string
- リクエストのクエリ文字列を無視します。
つまり、www.google.com/page.htm?query =>
www.google.com/page.htm です。
- 補足:クエリ文字列を削除するとメモリ消費量が大幅に減る可能性があります。
特にタイムスタンプ付きのリクエストではそうです。
- -r
--no-term-resolver
- 端末出力でIPリゾルバを無効にします。
- --444-as-404
- 非標準的なステータスコードである444を404として扱います。
- --4xx-to-unique-count
- 4xxクライアントエラーを固有訪問者に加えます。
- --anonymize-ip
- クライアントIPアドレスを匿名化します。
IP匿名化オプションはIPv4利用者IPアドレスの末尾オクテットとIPv6アドレスの末尾80ビットをゼロに設定します。
例:192.168.20.100 => 192.168.20.0
例:2a03:2880:2110:df07:face:b00c::1 =>
2a03:2880:2110:df07::
- 補足:これは -a
を非活性にします。
- --chunk-size=<256-32768>
- これは、チャンクを構成する行数を決定します。この引数は各スレッドで平行して処理されるデータの大きさに影響し、ファイルの読込と処理のタスクの並列化が可能になります。チャンクの大きさの値は、並列処理の効率性に影響し、システム資源や入力データの特性のような要因に基づいて調整できます。
- 低い値:チャンクの大きさが低すぎる値に設定されると、非効率な処理となる可能性があります。例えば、各チャンクにごく小数の行が含まれているとき、並列処理の管理と協調に掛かるオーバーヘッドがその利点を打ち消す可能性があります。
- 大きな値:逆に、チャンクの大きさが高すぎに設定されると、資源の枯渇に繋がりかねません。各チャンクはデータの一部を表し、それをスレッドが平行に処理します。チャンクの大きさを著しく大きい値に設定すると、メモリの問題を引き起こす可能性があります。とりわけ、同時に多くの並列スレッドが走っている場合がそうです。
- --anonymize-level
- 匿名化水準を指定します。
1 => 既定、2 => 強力、3 =>
神経質
| 隠れるビット数 |
レベル1 |
レベル2 |
レベル3 |
| IPv4 |
8 |
16 |
24 |
| IPv6 |
64 |
80 |
96 |
- --all-static-files
- クエリ文字列を含む静的ファイルを含めます。
例:/fonts/fontawesome-webfont.woff?v=4.0.3
- --browsers-file=<パス>
- 既定でGoAccessはブラウザとクローラーの「必須ないし基礎的な」厳選された一覧を解析します。
もし追加のブラウザを加える必要があればこのオプションを使ってください。
ブラウザやクローラーやフィードなどの追加の区切られた一覧を含めてください。
例としてはconfig/browsers.listや
https://raw.githubusercontent.com/allinurl/goaccess/master/config/browsers.list
を参照してください。
- --date-spec=<date|hr|min>
- 日時の厳密さに関して、日付(既定)、何時かを表示する時、
何分かを表示する分、のうちいずれかを日付に設定します。
- これは訪問者数パネルで使われます。
時水準で訪問者を把握するのに便利です。
例えば時指定ではトラフィックを18/Dec/2010:19になり、
分指定では18/Dec/2010:19:59が表示されます。
- --double-decode
- 二重に符号化された値を復号化します。
これにはユーザーエージェント、リクエスト、リファラが含まれます。
- --enable-panel=<パネル>
- 与えられたパネルについて解析と表示を有効にします。
- 利用できるパネル:
VISITORS
REQUESTS
REQUESTS_STATIC
NOT_FOUND
HOSTS
OS
BROWSERS
VISIT_TIMES
VIRTUAL_HOSTS
REFERRERS
REFERRING_SITES
KEYPHRASES
STATUS_CODES
REMOTE_USER
CACHE_STATUS
GEO_LOCATION
MIME_TYPE
TLS_TYPE
- --fname-as-vhost=<正規表現>
- ログファイル名に仮想ホストを使います。
ファイル名から仮想ホストを抽出するためにPOSIX正規表現が渡されます。
例:--fname-as-vhost='[a-z]*.[a-z]*'はawesome.com.log
=> awesome.com
と抽出するのに使えます。
- --hide-referrer=<探しもの>
- リファラを隠しつつ計上はします。
探しものの箇所ではワイルドカードが使えます。
つまり *.bing.com です。
- --hour-spec=<hr|min>
- 時刻指定を時(既定)ないし分のいずれかに設定します。
後者では時に1/10時間が後置されます。
- これは時間分布パネルで使われます。
サーバーで特定の時刻でトラフィックのピークを把握するのに役立ちます。
- --ignore-crawlers
- クローラーを計上から外します。
- --unknowns-as-crawlers
- 不明なOSとブラウザをクローラーとして分類します。
- --ignore-panel=<パネル>
- 与えられたパネルについて解析と表示から外します。
- 利用できるパネル:
VISITORS
REQUESTS
REQUESTS_STATIC
NOT_FOUND
HOSTS
OS
BROWSERS
VISIT_TIMES
VIRTUAL_HOSTS
REFERRERS
REFERRING_SITES
KEYPHRASES
STATUS_CODES
REMOTE_USER
CACHE_STATUS
GEO_LOCATION
MIME_TYPE
TLS_TYPE
- --ignore-referrer=<リファラ>
- リファラを計上から外します。
ワイルドカードが使えます。
例:*.domain.com ww?.domain.*
- --ignore-statics=<req|panel>
- 静的ファイルのリクエストを無視します。
req
妥当なリクエスト由来のリクエストのみ無視します
panels
パネル由来のリクエストを無視します
なおこれらはリクエストの総計に計上されます。
- --ignore-status=<コード>
- 1つ以上のステータスコードを解析と表示から外します。
複数のステータスコードについては、このオプションを複数回使用してください。
- --keep-last=<日数>
- ストレージに指定された日数分保持します。
これによりストレージの周回表が巡回されます。
例:直近7日間のみを保持して表示します。
- --no-ip-validation
- クライアントのIPの検証を無効化します。
ログ出力される前にIPアドレスが粉飾されている場合に便利です。
それでもログには%hの場所取りがなされている必要があり、大抵は解決されたIPです。
例:ord37s19-in-f14.1e100.net.
- --no-strict-status
- HTTPステータスコードの検証を無効にします。
対象との接続が確立され対象が応答を送ったときのみにこの値を記録するサーバーもあります。
そうでない場合-として記録されます。
- --num-tests=<数値>
- 与えられたログ・日付・時刻の書式に照らし合わせるアクセスログからの行数。
既定では解析器は10行に対して検査するように設定されています。
0に設定したときは解析器は一部の行のみの検査ではなくアクセスログ全体を解析します。
<number>に到達するまでに与えられたログ・日付・時刻の書式がその行に照合したら、
解析器はそのログを妥当と判断し、
そうでなければGoAccessはEXIT_FAILUREを返して関係するエラー文言を表示します。
- --process-and-exit
- ログを解析しデータ出力することなく終了します。
ファイルや端末に出力することなくディスク上のデータベースに新規データを加えたいだけのときに便利です。
- --real-os
- 実際のOS名を表示します。
例えばWindows XP、Snow
Leopardです。
- --sort-panel=<パネル,フィールド,順序>
- 初期の読込でパネルを整列します。
整列オプションは読点区切りです。
オプションは、パネル,指標,順序、の形式です。
- 使える指標:
BY_HITS -
ヒット数により整列
BY_VISITORS -
正味訪問者で整列
BY_DATA - データで整列
BY_BW - 帯域幅で整列
BY_AVGTS -
平均提供時間で整列
BY_CUMTS -
累積提供時間で整列
BY_MAXTS -
最大提供時間で整列
BY_PROT -
HTTPプロトコルで整列
BY_MTHD - HTTPメソッドで整列
- 使える順番:
ASC
DESC
- --static-file=<拡張子>
- 静的ファイルの拡張子を追加します。
例:.mp3
拡張子は大文字小文字を区別しません。
地理的位置のオプション
- -g --std-geoip
- メモリ使用量を抑えるため標準的なGeoIPデータベースにします。
- --geoip-database=<地理情報ファイル>
- GeoLiteCity.datのようなGeoIPデータベースファイルへのパスを指定します。
GeoIP2を使用している場合、
MaxMind.comからGeoLite2ないしCountryのデータベースをダウンロードし、
データベースを指定するために--geoip-databaseオプションを使う必要があるでしょう。
過去のGeoIP用にデータベースファイルを更新することもでき、
そのファイルはMaxMind.comのGeoLite
Legacy Databasesにあります。
IPv4とIPv6のファイルも同様に対応済みです。
更新されたDBのURLについては、既定のGoAccess設定ファイルを参照してください。
補足:
--geoip-city-dataは--geoip-databaseの別名です。
他のオプション
- -h --help
- ヘルプ。
- -s --storage
- B+木やハッシュのような、現在のストレージメソッドを表示します。
- -V --version
- バージョン情報を表示して終了します。
- --dcf
- `-p`が使われていない場合既定の設定ファイルのパスを表示します。
永続ストレージオプション
- --persist
- 解析されたデータをディスクに永続化します。
データベースファイルが存在するときはファイルは上書きされます。
これは最初のデータベースに対して設定されます。
後述の例を参照してください。
- --restore
- ディスクから以前格納されたデータを読み込みます。
永続化されたデータのみを読む場合、データベースファイルが存在している必要があります。
--persistと後述の例を参照してください。
- --db-path=<ディレクトリ>
- ディスク上のデータベースファイルが保管されているパスです。
既定値は/tmpディレクトリです。
独自のログ・日付書式
GoAccessは理想的にはどんなwebのログ書式も解析できます。
予め定義されたオプションには
Common Log Format (CLF)、 Combined Log Format (XLF/ELF)、 Amazon
CloudFront (Download Distribution)、 Google Cloud Storage、
W3C形式 (IIS)
が含まれます。
前2者は仮想ホスト付きのものもあります。
GoAccessはどんな独自の書式文字列も受け付けます。
ログ書式を設定するには2つの方法があります。
最も簡単なのはGoAccessを-c付きで走らせて、
設定ウィンドウから指示に随って入力することです。
他に~/.goaccessrcや%sysconfdir%以下で設定することもできます。
- time-format
- time-format変数は空白1つに続いてログの書式の時刻を指定します。
これには通常の文字と特殊な書式指定子の組み合わせが含まれます。
指定子は全てパーセント記号
(%) 始まりです。 `man
strftime`を参照してください。
%Tや%H:%M:%Sなどがあります。
- 補足:タイムスタンプがマイクロ秒で与えられているとき、
%fはtime-formatとして使われていなければなりません。
またタイムスタンプがミリ秒で与えられているときは、
%fは%*として使われなければなりません。
- date-format
- date-format変数には空白1つが続き、
ログの書式の日付を指定します。
この書式には通常の文字と特殊な書式の指定子のあらゆる組み合わせを含められます。
指定子は全てパーセント記号
(%) 始まりです。 `man
strftime`を参照してください。
例えば%Y-%m-%dです。
- 補足:タイムスタンプがマイクロ秒で与えられているとき、
%fはdate-formatとして使われなければなりません。
またタイムスタンプがミリ秒で与えられているときは%fは%*として使われなければなりません。
- log-format
- log-format変数には空白1つないし\tが続き、ログ書式の文字列を指定します。
- %x
- time-formatとdate-format変数に照合する日付と時刻のフィールドです。
これは与えられたタイムスタンプや日付と時刻が、
日付と時刻が2つの分離した変数ではなく、
単一の文字列(例:1501647332や20170801235000)として結合されているときに使われます。
- %t
- time-format変数に照合する時刻フィールドです。
- %d
- date-format変数に照合する日付フィールドです。
- %v
- リクエストに応対するサーバー(仮想ホスト)の正統なServer
Nameです。
- %e
- これはHTTP認証により決定された文書を要求した人物のユーザーIDです。
- %C
- サーバーが提供するオブジェクトのキャッシュ状態です。
- %h
- ホスト(クライアントIPアドレスで、IPv4ないしIPv6のいずれかです)
- %r
- クライアントからの要求の行です。
解析できるようにするため要求の周囲の特定の区切文字
(単一引用符、二重引用符、その他諸々)が必要です。
さもなければ%m %U
%Hといった特殊な書式指定子の組み合わせを使わねばなりません。
- %q
- 検索文字列です。
- %m
- リクエストメソッドです。
- %U
- リクエストされたURLのパスです。
補足:クエリ文字列が%Uにあるとき、
%qを使う必要はありません。
しかしURLパスが何らクエリ文字列を含んでいなければ、
%qを使うことでクエリ文字列をリクエストの後に付けることができます。
- %H
- リクエストされたプロトコルです。
- %s
- サーバーがクライアントに送り返すステータスコードです。
- %b
- クライアントに返されるオブジェクトの大きさです。
- %R
- 「リファラ」のHTTPリクエストヘッダです。
- %u
- ユーザーエージェントのHTTPリクエストヘッダです。
- %K
- 接続に選ばれたTLS暗号設定です(Apache
LogFormatでの%{SSL_PROTOCOL}xです)。
- %k
- 接続に選ばれたTLS暗号設定です(Apache
LogFormatでの%{SSL_CIPHER}xです)。
- %M
- リクエストされたリソースのMIME種別です(Apache
LogFormatでの%{Content-Type}oです)。
- %D
- リクエストに応対するまでに掛かった時間であり、10進整数のミリ秒で指定します。
- %T
- リクエストに応対するのに掛かった時間で、ミリ秒精度の秒単位で指定します。
- %L
- リクエストに応対するのに掛かった時間で、10進整数のミリ秒で指定します。
- %n
- リクエストに応対するまでに掛かった時間であり、ミリ秒で指定します。
- %^
- このフィールドを無視します。
- %~
- 空白でない (!isspace)
文字が見付かるまでログ文字列を読み進めます。
- ~h
- X-Forwarded-For (XFF)
フィールド中のホスト
(クライアントIPアドレスで、IPv4ないしIPv6のいずれか)です。
ホスト指定子の前にチルダが付いたものとなっている特別な指定子を使います。
XFFフィールドを区切る文字が続きます。
この区切り文字は中括弧で囲まれます。
つまり"~h{,
}"のようになります。
例えば"~h{,
}"はコンマと空白(二重引用符で囲まれたところ)で区切られた
"11.25.11.53,
17.68.33.17"フィールドを解析するために使われます。
| XFFフィールド |
指定子 |
| "192.1.2.3, 192.68.33.17, 192.1.1.2" |
"~h{, }" |
| "192.1.2.12", "192.68.33.17" |
~h{", } |
| 192.1.2.12, 192.68.33.17 |
~h{, } |
| 192.1.2.14 192.68.33.17 192.1.1.2 |
~h{ } |
補足:GoAccessで提供時間の累計と最大値の平均を取得するためには、
webサーバーで応答時間のログ出力を開始する必要があります。
Nginxではログ書式に$request_timeを追加でき、
Apacheでは%Dを追加できます。
重要:複数の提供時間の指定子が同時に使われた場合、
書式文字列で指定された最初のオプションが他の指定子よりも優先されます。
GoAccessには以下のフィールドが必須です。
- %h 妥当なIPv4ないしIPv6
- %d 妥当な日付
- %r リクエスト
対話的メニュー
- F1またはh
- メインのヘルプです。
- F5
- メインのウィンドウを再描画します。
- q
- プログラムまたは現在のウィンドウを終了するか、活性のモジュールを折り畳みます。
- oまたはエンター
- 選択されたモジュールを展開ないしウィンドウを開きます。
- 0-9とShift + 0
- 選択されたモジュールを活性に設定します
- j
- 展開されたモジュール内でスクロールを下に移動します。
- k
- 展開されたモジュール内でスクロールを上に移動します。
- c
- カラースキームを設定したり変更したりします。
- タブ
- モジュールの巡回を先に進めます。現在の活性なモジュールから開始します。
- シフトキーとタブ
- モジュールの巡回を後ろに戻します。現在の活性なモジュールから開始します。
- ^f
- 活性モジュールの中で1画面スクロールを前に進めます。
- ^b
- 活性モジュールの中で1画面スクロールを後ろに戻します。
- s
- 活性モジュールの並び替えオプションです
- /
- 全てのモジュールを検索します(正規表現が使えます)
- n
- 全てのモジュールを通じて次の発生位置を見つけ出します。
- g
- 最初の項目や画面の一番上に移動します。
- G
- 最後の項目や画面の一番下に移動します。
例
補足:データをGoAccessにパイプで流し込むときはログ、日付、時刻設定ダイアログは質問されないので、予め設定ファイルかコマンドラインで定義しておく必要があります。
異なる出力
端末に出力して対話的なレポートを生成するには以下のようにします。
- # goaccess access.log
HTMLレポートを生成するには以下のようにします。
- # goaccess access.log -a -o report.html
JSONでレポートを生成するには以下のようにします。
- # goaccess access.log -a -d -o report.json
CSVファイルを生成するには以下のようにします。
- # goaccess access.log --no-csv-summary -o report.csv
GoAccessは実時間の絞り込みと解析を行う上で、
非常に柔軟性が高い側面もあります。
例えばgoaccessが起動したあとのログを監視することによって素早く問題を診断できます。
- # tail -f access.log | goaccess -
そしてさらに良くするために、
実時間解析を保存するためのパイプを空けたままを維持しつつ、
tail
-fとgrep、awk、sedなどのようなパターン照合ツールを活用することができます。
- # tail -f access.log | grep -i --line-buffered 'firefox' | goaccess
--log-format=COMBINED -
もしくはパイプを開きフィルタを適用しつつ、
ファイルの冒頭から解析するにはこのようにします。
- # tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess
--log-format=COMBINED -o report.html --real-time-html -
もしくはログの日時のタイムゾーンを異なるタイムゾーン、
例えばEurope/Berlin、に変換するには次のようにします。
- # goaccess access.log --log-format='%h %^[%x] "%r" %s %b
"%R" "%u"' --datetime-format='%d/%b/%Y:%H:%M:%S %z'
--tz=Europe/Berlin --date-spec=min
複数のログファイル
GoAccessで複数のログを解析するにはいくつかの方法があります。
最も単純なのはコマンドラインに複数のログファイルを渡すことです。
- # goaccess access.log access.log.1
通常のファイルから読み込みつつパイプからファイルを解析することさえできます。
- # cat access.log.2 | goaccess access.log access.log.1 -
補足となりますが、
単一ダッシュがコマンドラインの後ろに付いていることで、
GoAccessにパイプから読み込むことが伝わります。
さらにGoAccessの柔軟性を上げたければ一連のパイプにすることができます。
例として現在のログファイルに加えて、
全ての圧縮されたログファイルaccess.log.*.gzを処理したければ、
次のようにできます。
- # zcat access.log.*.gz | goaccess access.log -
補足:Mac OS
Xではzcatではなくgunzip
-cを使ってください。
実時間HTML出力
GoAccessではHTMLレポートに実時間データを出力することができます。
外部ファイル依存のない単一ファイルからなるため、
HTMLファイルをEメールで送ることさえできるのです。
やったぜ!
実時間HTMLレポートを生成する工程は、
静的なレポートを作る過程と大変似ています。
実時間にするのに必要なのは--real-time-htmlだけです。
- # goaccess access.log -o /usr/share/nginx/html/site/report.html
--real-time-html
既定ではGoAccessは生成されたレポートのホスト名を使います。
オプションとしてクライアントのブラウザが接続するURLを指定することができます。
詳細な例は https://goaccess.io/faq
を参照してください。
- # goaccess access.log -o report.html --real-time-html
--ws-url=goaccess.io
既定ではGoAccessはポート7890で待ち受けます。
7890以外の別のポートを使うためには以下のように指定することができます
(ポートの穴開けができていることを確かめてください)。
- # goaccess access.log -o report.html --real-time-html --port=9870
またWebSocketサーバーを0.0.0.0以外の別のアドレスに束縛したければ以下のように指定することができます。
- # goaccess access.log -o report.html --real-time-html
--addr=127.0.0.1
補足:TLS/SSL接続上で実時間データを出力するには--ssl-cert=<cert.crt>と--ssl-key=<priv.key>を使う必要があります。
日付の扱い
別のパイプの有用な点はwebのログから日付で絞り込むことでしょう。
以下は05/Dec/2010からファイル末尾までの全てのHTTPリクエストを取得します。
- # sed -n '/05Dec2010/,$ p' access.log | goaccess -a -
または昨日や明日のような相対的な日にちを使うと以下です。
- # sed -n '/'$(date '+%d%b%Y' -d '1 week ago')'/,$ p' access.log | goaccess
-a -
日付aから日付bまでの特定の時刻間隔のみを解析したければ以下のようにできます。
- # sed -n '/5Nov2010/,/5Dec2010/ p' access.log | goaccess -a -
特定の量のデータのみを保存し容量上で古いものから再利用されている場合は、
特定の日数のみ保持するようにできます。
例えば直近5日間を保持して表示するには次のようにします。
- # goaccess access.log --keep-last=5
仮想ホスト
ログに仮想ホスト(サーバーブロック)フィールドがあるものとします。例えば次の通り。
- vhost.com:80 10.131.40.139 - - [02/Mar/2016:08:14:04 -0600] "GET
/shop/bag-p-20 HTTP/1.1" 200 6715 "-" "Apache
(internal dummy connection)"
そしてどの仮想ホストに最頻のURLが属しているのかを見るために、仮想ホストをリクエストに加えたいことがあるでしょう。
- awk '$8=$1$8' access.log | goaccess -a -
仮想ホストのリストを除外するためには以下のようにできます。
- # grep -v "`cat exclude_vhost_list_file`" vhost_access.log |
goaccess -
ファイルとステータスコード
リクエストのうち、html、htm、phpなどの閲覧ページなどで、
特定のページを解析するには次のようにします。
- # awk '$7~/.html|.htm|.php/' access.log | goaccess -
なお$7はログ書式がcommonやcombinedのもの(仮想ホストなし)のリクエストフィールドであり、
ログに仮想ホストが含まれるのであれば代わりに$8を使うことになるでしょう。
注目しているフィールドを確認しておくのが一番です。
例えば次のように。
- # tail -10 access.log | awk '{print $8}'
または特定のステータスコードを解析するには次のようにします。
ここでは500 (Internal Server Error)
を例に挙げます。
- # awk '$9~/500/' access.log | goaccess -
サーバー
また、GoAccessを低い優先度で走らせたければ次のようにできることは書いておいたほうがよいでしょう。
- # nice -n 19 goaccess -f access.log -a
そしてサーバーにインストールしたくない場合であってもローカルマシンから走らせられます。
- # ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess
-
補足:SSHには-nが必要で、
こうすることでGoAccessが標準入力から読むことができます。
またパスフレーズが要求されるとうまく動かないため認証には必ずSSH鍵を使うようにしてください。
漸進的ログ処理
GoAccessには内部的な容量を通じて漸進的にログを処理してディスクにデータを吐き出す能力があります。
これは以下のように動作します。
- 1
- データセットは最初に--persistで永続化されていなければならず、
それから同じデータセットを--restoreを使って読み込むことができます。
- 2
- 新しいデータが(パイプやログファイルを通じて)渡されたら、元のデータセットに追記します。
補足
GoAccessは処理対象の全てのファイル(ファイルが同じパーティションにあるものとしています)のiノードを把握しており、
それに加えてログからそれぞれのファイルの解析された最後の行数と、
解析された最後の行のタイムスタンプを含むデータスニペットの抽出を行っています。
例:inode:29627417|line:20012|ts:20171231235059
最初にスニペットが解析されたログと照合するか比較し、
もし合っていればログが劇的に変化していないものとします。
例えば末尾の空行が切り詰められていないといったことです。
iノードが現在のファイルに照合しなければ全ての行を解析します。
現在のファイルがiノードに照合した場合ファイルの残りを読み、
解析済みの行数とタイムスタンプを更新します。
もう1つ注意が必要なのは、
タイムスタンプが格納されているタイムスタンプより若いログの行は解析されないということです。
パイプされたデータは最後に読んだ行のタイムスタンプに基づいて扱われます。
例えばタイムスタンプが格納されているものより古いものを見付けるまで、
入ってくる全てのエントリを解析後に無視します。
例えば、
- //
先月のアクセスログ
# goaccess access.log.1 --persist
として、次のように読み込みます。
- //
この月のアクセスログを追記し新しいデータを保存します。
# goaccess access.log --restore --persist
(新しいデータを解析することなく)永続化されたデータのみを読むには次のようにします。
- # goaccess --restore
補足
実時間HTMLレポートのそれぞれの活性パネルには合計360個ないし50個の項目が含まれます。
項目数はmax-itemsを使って調節できます。
HTML、CSV、JSON出力については1パネルにつき、
366項目の既定値より大きい最大値を入れることができます。
ヒットとはリクエストのことで、
例えば10リクエストは10ヒットと同じです。
特にIP、日付、ユーザーエージェントが同じHTTPリクエストは1つの正味の訪問者と見なします。
ヂュアルスタック対応を有効にしたい場合は、既定の--addr=0.0.0.0の代わりに--addr=::を使ってください。
生成されたレポートはWebSocketサーバーへの再接続を試み、
最初は1秒後でその後は指数関数的な間隔で試行されます。
20回試行は繰り返されます。
バグ
バグを発見したと思ったら
goaccess@prosoftcorp.com
まで私にEメールを送るか、
https://github.com/allinurl/goaccess/issues
のイシュートラッカーを使ってください。
作者
Gerardo Orellana <hello@goaccess.io>
詳細や新しいリリースについては
https://goaccess.io
にお越しください。