質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.36%

  • CentOS

    2947questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • bash

    737questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

jqコマンドのエラー原因が分からない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 4,376

teketeke

score 41

前提・実現したいこと

AWS S3上に保存されている ClowdTrail のログファイル(~.gz形式)をローカルに取り込み、
ログのイベント発生時間でソートしたファイルを作成するスクリプトをCronで毎時動かしています。

今までは、処理のに時間は掛っていましたがエラーは発生していなかったみたいなのですが、
最近以下のエラーメッセージが発生しているのが見つかりました。
※メッセージはCronからメールで送られてきました。

エラーメッセージを検索してみたのですが、原因がわからなかったため、質問させていただきました。

OS:CentOS6.7
jq - commandline JSON processor [version 1.4]

発生している問題・エラーメッセージ

 jq: error: Cannot iterate over string
 jq: error: string and array cannot be sorted, as they are not both arrays
 jq: error: Cannot iterate over string
 jq: error: string and array cannot be sorted, as they are not both arrays
~以下同じ~

現在、手動で実行、cronで実行してもメッセージは発生していません。

ソースコード

スクリプトの中で、jqを使用しているのは、以下のコマンドなのですが、何が問題なのでしょうか。

find /var/log/trail-log/ -name "*.json.gz" | sort | xargs gunzip -c | /usr/bin/jq '.[] | sort_by(.eventTime) | .[]' | /usr/bin/jq '{awsRegion, eventName, eventTime, userName: .userIdentity.userName, requestParameters}' | /usr/bin/jq '"[\(.eventTime)] \(.awsRegion) \(.userName) \(.eventName) \(.requestParameters)"' > trail.log

補足情報(言語/FW/ツール等のバージョンなど)

※参考として、.gzを解凍したファイルの中身を記載致します。
{"Records":[{"eventVersion":"1.03","userIdentity":{"type":"IAMUser","principalId":"xxxxxxxxxx","arn":"arn:aws:iam::xxxxxxxxxx:user/xxxxxxxxxx-user","accountId":"xxxxxxxxxx","accessKeyId":"xxxxxxxxxx","userName":"xxxxxxxxxx-user"},"eventTime":"2016-02-23T13:22:44Z","eventSource":"ec2.amazonaws.com","eventName":"DescribeInstances","awsRegion":"ap-northeast-1","sourceIPAddress":"xxx.xxx.xxx.xxx","userAgent":"aws-cli/1.9.7 Python/2.6.6 Linux/2.6.32-573.7.1.el6.x86_64 botocore/1.3.7","requestParameters":{"instancesSet":{},"filterSet":{"items":[{"name":"instance-id","valueSet":{"items":[{}]}}]}},"responseElements":null,"requestID":"xxxxxxxxxx-6e0f-434e-a5e7-xxxxxxxxxx","eventID":"xxxxxxxx-00c5-43a6-944a-xxxxxxxx","eventType":"AwsApiCall","recipientAccountId":"xxxxxxxxxx"},{"eventVersion":"1.03","userIdentity":{"type":"IAMUser","principalId":"xxxxxxxxxx","arn":"arn:aws:iam::xxxxxxxxxx:user/xxxxxxxxxx-user","accountId":"xxxxxxxxxx","accessKeyId":"xxxxxxxxxx","userName":"xxxxxxxxxx-user"},"eventTime":"2016-02-23T13:22:49Z","eventSource":"ec2.amazonaws.com","eventName":"DescribeInstances","awsRegion":"ap-northeast-1","sourceIPAddress":"xxx.xxx.xxx.xxx","userAgent":"aws-cli/1.9.7 Python/2.6.6 Linux/2.6.32-573.7.1.el6.x86_64 botocore/1.3.7","requestParameters":{"instancesSet":{},"filterSet":{"items":[{"name":"instance-id","valueSet":{"items":[{"value":"i-xxxxxxxx"}]}}]}},"responseElements":null,"requestID":"xxxxxxxx-25ee-465c-9a1f-xxxxxxxx","eventID":"xxxxxxxx-0c36-49cb-924e-xxxxxxxx","eventType":"AwsApiCall","recipientAccountId":"xxxxxxxx"},{"eventVersion":"1.03","userIdentity":{"type":"IAMUser","principalId":"xxxxxxxxxx","arn":"arn:aws:iam::xxxxxxxxxx:user/xxxxxxxxxx-user","accountId":"xxxxxxxxxx","accessKeyId":"xxxxxxxxxx","userName":"xxxxxxxxxx-user"},"eventTime":"2016-02-23T13:22:47Z","eventSource":"ec2.amazonaws.com","eventName":"DescribeInstances","awsRegion":"ap-northeast-1","sourceIPAddress":"xxx.xxx.xxx.xxx","userAgent":"aws-cli/1.9.7 Python/2.6.6 Linux/2.6.32-573.7.1.el6.x86_64 botocore/1.3.7","requestParameters":{"instancesSet":{},"filterSet":{"items":[{"name":"instance-id","valueSet":{"items":[{"value":"?i-xxxxxxxx?"}]}}]}},"responseElements":null,"requestID":"xxxxxxxx-3163-4b2f-88c0-xxxxxxxx","eventID":"xxxxxxxx-53af-4e93-abe4-xxxxxxxx","eventType":"AwsApiCall","recipientAccountId":"xxxxxxxxxx"}]}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

"Cannot iterate over string"というメッセージはexecute.cの698行目
"cannot be sorted, as they are not both arrays"というメッセージはbuiltin.cに2箇所にあります。
おそらく、「sort」処理の対象になっているフィールドにStringとArrayが混在していてソートに失敗しているのではないでしょうか。
おそらく不正データなので該当するデータを削除するか、補正してやればエラーは回避できると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/06 08:58

    回答いただきありがとうございます。

    もしご存知であれば、
    StringとArrayが混在している可能性があるとのことなのですが、該当データがどれかをうまく調べる何か良い調査方法はご存知ないでしょうか。

    .gzファイルが [リージョン(約10種)/年/月/日/(約5分ごとの~.gz)]のように取得されてくるので、ファイル数が多く、調査が難航しています。
    ※調査方法は、書き込みました sort を実行しているコマンドを[日ディレクトリ]で手動で実行していますが、ファイルの量が多く処理に時間がかかり、又マシンの負荷が上がってしまい、すべてのディレクトリ調査が出来ていません。 たぶんスクリプト作って動かせばよいのかもしれませんが、load averageが5とか最悪10以上になってまともに動かなくなってしまって,,,

    キャンセル

同じタグがついた質問を見る

  • CentOS

    2947questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • bash

    737questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。