데이터를 출력으로 검색하는 컬 명령 예제가 있습니다. 이 외에도 출력에는 다음 데이터를 가져오기 위해 컬 명령을 실행하는 데 다시 사용할 수 있는 또 다른 URL도 포함되어 있습니다. 응답의 다음 URL을 사용하여 스크립트에서 프로그래밍 방식으로 다음 페이지의 이벤트를 자동으로 반환하는 bash 스크립트를 만드는 데 도움을 주세요.
예:
컬 -H '권한 부여: 전달자' -XGET 'https://.loggly.com/apiv2/events/iterate?q=*&from=-10m&until=now&size=1'
출력 샘플:
{
"events": [
{
"raw": "{\"function\": \"handle\", \"publish_success\": 83, \"timestamp\": \"17-02-01 00:58:04,852149\", \"start_time\": 1485910682.351175, \"args\": \"\", \"duration\": 2501, \"message\": \"end publish run\", \"publish_fail\": 0, \"level\": \"INFO\", \"source_duration\": {\"duration\": 1, \"end_time\": 1485910682.351801}, \"feature_duration\": {\"duration\": 1427, \"end_time\": 1485910683.786751}, \"pathname\": \"/opt/loggly/web/app/alert/management/commands/alerterd.py\", \"lineno\": 329, \"cache_duration\": {\"duration\": 1, \"end_time\": 1485910684.821093}, \"action\": \"alerterd\", \"update_duration\": {\"duration\": 8, \"end_time\": 1485910684.852121}, \"end_time\": 1485910684}",
"logtypes": [
"json",
"syslog"
],
"timestamp": 1485910684852,
"unparsed": null,
"logmsg": "{\"function\": \"handle\", \"publish_success\": 83, \"timestamp\": \"17-02-01 00:58:04,852149\", \"start_time\": 1485910682.351175, \"args\": \"\", \"duration\": 2501, \"message\": \"end publish run\", \"publish_fail\": 0, \"level\": \"INFO\", \"source_duration\": {\"duration\": 1, \"end_time\": 1485910682.351801}, \"feature_duration\": {\"duration\": 1427, \"end_time\": 1485910683.786751}, \"pathname\": \"/opt/loggly/web/app/alert/management/commands/alerterd.py\", \"lineno\": 329, \"cache_duration\": {\"duration\": 1, \"end_time\": 1485910684.821093}, \"action\": \"alerterd\", \"update_duration\": {\"duration\": 8, \"end_time\": 1485910684.852121}, \"end_time\": 1485910684}",
"id": "7ce48bda-e819-11e6-808b-12a1c1f6d2c3",
"tags": [],
"event": {
"syslog": {
"severity": "Informational",
"appName": "msg",
"timestamp": "2017-02-01T00:58:04.852+00:00",
"facility": "local use 1",
"priority": "142",
"host": "127.0.0.1"
},
"json": {
"function": "handle",
"publish_success": 83,
"level": "INFO",
"timestamp": "17-02-01 00:58:04,852149",
"start_time": 1485910682.351175,
"cache_duration": {
"duration": 1,
"end_time": 1485910684.821093
},
"update_duration": {
"duration": 8,
"end_time": 1485910684.852121
},
"duration": 2501,
"pathname": "/opt/loggly/web/app/alert/management/commands/alerterd.py",
"end_time": 1485910684,
"source_duration": {
"duration": 1,
"end_time": 1485910682.351801
},
"action": "alerterd",
"message": "end publish run",
"publish_fail": 0,
"feature_duration": {
"duration": 1427,
"end_time": 1485910683.786751
},
"lineno": 329
}
}
}
],
"next": "https://<subdomain>.loggly.com/apiv2/events/iterate?next=eea25ee6-0e48-4428-a544-36d6441d132c"
}
그래서 우리는 다음과 같이 또 다른 명령을 실행하고 싶습니다:
컬 -H '권한 부여: 전달자' -XGET 'https://.loggly.com/apiv2/events/iterate?next=eea25ee6-0e48-4428-a544-36d6441d132c'
답변1
jq
명령을 살펴보십시오 . 아직 설치되지 않은 경우 이제 대부분의 리포지토리에서 사용할 수 있습니다. 명령줄에서 JSON을 구문 분석하는 데 사용됩니다. 맨페이지나 여기에서 자세한 정보를 읽을 수 있습니다.
예를 들어 다음과 같이 컬 명령의 출력을 jq로 파이프하는 경우:
curl .... | jq '.next'
다음과 같이 따옴표로 묶인 URL 값만 얻을 수 있습니다.
"https://<subdomain>.loggly.com/apiv2/events/iterate?next=eea25ee6-0e48-4428-a544-36d6441d132c"
값의 유효성을 테스트하거나 다른 컬 또는 필요한 항목에 전달할 수 있습니다.
답변2
.json을 구문 분석하고 해당 부분을 추출하려면 jq, fx 또는 jshon과 같은 도구를 사용해야 합니다 .next
.
잭: 간단하고 빠른 JSON 파서입니다.
FX: 컬과 함께 사용하도록 설계된 JSON 파서입니다.
제이슨: 정말 빠르고 가벼운 JSON 파서입니다.
그러면 bash 스크립트(jq 사용)는 다음과 같이 간단해질 수 있습니다.
#!/bin/bash
JSONF="filewithurl.json"
curl $(jq -r ".next" < ${JSONF}) -H 'Authorization: bearer '
참고로 이는테스트되지 않은귀하의 URL이 불완전하기 때문에 보안이나 코드 유출로 인한 것으로 추정됩니다.