0

私のカスタムApacheコンテナ(Kubernetesのポッドに展開された)で作成されたログをStackdriverコレクタに送信するための手順を知りたいと思います。KubernetesのカスタムドッカーコンテナStackdriverを使用したログ

標準のapache(またはnginx)コンテナを使用してポッドを作成すると、access.logとerror.logがStackdriverに自動的に送信されることに気付きました。実際に

私が代わりに私は私のカスタムのapache関連何も表示されませんKubernetesのダッシュボードの上やGoogleクラウドダッシュボードの上に両方のログイン--->ログ--->ログ を見ることができるよ...

提案がありますか?

答えて

0

いくつかの調査の後、私はカスタムApacheのコンテナからログフォワーダの問題を解決しました。

"標準のリダイレクト"(/ dev/stdoutまたは/ proc/self/fd/1を使用)が動作しない理由はわかりませんが、これは "ロギングエージェントを備えたサイドカーコンテナ"

apiVersion: v1 
data: 
    fluentd.conf: | 
    <source> 
     type tail 
     format none 
     path /var/log/access.log 
     pos_file /var/log/access.log.pos 
     tag count.format1 
    </source> 

    <source> 
     type tail 
     format none 
     path /var/log/error.log 
     pos_file /var/log/error.log.pos 
     tag count.format2 
    </source> 

    <match **> 
     type google_cloud 
    </match> 
kind: ConfigMap 
metadata: 
    name: my-fluentd-config 

2)2つのコンテナとポッドを作成します:カスタムのapache +ログエージェント

1)を使用すると、fluentdの構成を設定しますconfigMagファイルを作成します。どちらのコンテナもログフォルダをマウントします。

apiVersion: v1 
kind: Pod 
metadata: 
    name: my-sidecar 
    labels: 
    app: my-sidecar 
spec: 
    volumes: 
    - name: varlog 
    emptyDir: {} 
    - name: config-volume 
    configMap: 
     name: my-fluentd-config 

    containers: 
    - name: my-apache 
    image: <your_custom_image_repository> 
    ports: 
     - containerPort: 80 
     name: http 
     protocol: TCP 
    volumeMounts: 
    - name: varlog 
     mountPath: /var/log 

    - name: log-agent 
    image: gcr.io/google_containers/fluentd-gcp:1.30 
    env: 
    - name: FLUENTD_ARGS 
     value: -c /etc/fluentd-config/fluentd.conf 
    volumeMounts: 
    - name: varlog 
     mountPath: /var/log 
    - name: config-volume 
     mountPath: /etc/fluentd-config 

3)と私の-apacheのコンテナに入力します:

とhttpd.confには、次のファイル使用しているチェック/変更:

をエージェントがfluentd設定がマウントされますのみをログに記録
ErrorLog /var/log/error.log 

CustomLog /var/log/access.log common 

(あなたが何かを変更した場合は、apacheを再起動する必要があります。Googleクラウドコンソールでの今)

4) - >あなたのようなフィルターでのStackdriverでのApacheのアクセス/エラーログを確認することができますログ:私はは/ devへのリンクを作成しようとした

resource.type="container" 
labels."compute.googleapis.com/resource_name"="my-sidecar" 
0

まず、Nginxコンテナのaccess.logとerror.logにログを送信するデフォルトの動作を見てみましょう。ファイルのどちらも、したがって、あなたがKubernetesダッシュボード上やGoogleクラウドダッシュボード上のログにアクセスすることができます

access.log -> /dev/stdout 
error.log -> /dev/stderr 

を以下のようシンボリックリンク(ソフトリンク)を持っています。あなたの問題へ

ソリューション

をカスタムApacheやnginxのサーバーを持っているとのaccess.logおよびerror.logファイルでは、/ dev /標準出力は、/ devへのシンボリックリンクを持っている場合、私はチェックすることができ示唆しています/ stderrファイルをそれぞれ作成します。

シンボリックリンクがない場合、ログにアクセスするには、両方のファイルに対してシンボリックリンクを作成する必要があります。 これはコマンドです。

ln -s source_file myfile 
+0

/stdout(たとえば)、動作しません。 私の純粋なapache2コンテナのhttpd.confもチェックしました。アクセスログは CustomLog/proc/self/fd/1に設定されています。 であり、コンテナログはStackdriverで動作しています。 は、私は、このように純粋なHTTPのアクセスログを変更し、別の試みようにするには: - >は/ dev/stdoutを と、この場合も のaccess.log: を組み合わせ のCustomLog「ログ/ access_logのを」私は、リンクを作成しましたログが機能します。 私のカスタムApacheで同じ試行をした場合、Stackdriverのログは表示されません。 – suikoy

+0

設定ファイルのaccess_logがオンになっているかどうか確認できますか? –

+0

CustomLog "logs/access_log"を設定すると、実際に私のカスタムApacheで動作していますが、access_logはファイルでリンクではなく、Webサーバー上のすべてのアクセスを見ることができます。問題は、ログを/ dev/stdoutまたは/ proc/self/fd/1にリダイレクトしようとするときに発生します。その場合は、apacheは常に動作していますが、スタックドライバやkubernetesログに何も表示されません。 – suikoy

関連する問題