Skip to content

Commit d6b27c8

Browse files
committed
[Add] - query cloudwatch insight and get the result
1 parent fcfea5c commit d6b27c8

File tree

1 file changed

+82
-2
lines changed

1 file changed

+82
-2
lines changed

services/logs.sh

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ aws_logs_list() {
55
aws_run_commandline 'aws logs describe-log-groups --query "*[].logGroupName"'
66
}
77

8-
aws_logs_tail() {
8+
function aws_logs_tail() {
99
aws_log_group_name=$1
1010

1111
# Check aws_log_group_name invalid
@@ -18,8 +18,88 @@ aws_logs_tail() {
1818
eval ${aws_cmd}
1919
}
2020

21-
aws_logs_tail_with_hint() {
21+
function aws_logs_tail_with_hint() {
2222
echo "Your log group name >"
2323
aws_log_group_name=$(peco_create_menu 'peco_aws_logs_list')
2424
aws_logs_tail $aws_log_group_name $1
2525
}
26+
27+
# Function to start an AWS CloudWatch Logs query
28+
aws_logs_run_query() {
29+
local log_group_name="$1" # The name of the log group
30+
local start_time="$2" # The start time for the query in milliseconds
31+
local end_time="$3" # The end time for the query in milliseconds
32+
local query_string="$4" # The CloudWatch Logs Insights query string
33+
local region="$5" # The AWS region
34+
35+
# Ensure required parameters are provided
36+
if [[ -z "$log_group_name" || -z "$start_time" || -z "$end_time" || -z "$query_string" || -z "$region" ]]; then
37+
echo "Error: Missing required arguments."
38+
echo "Usage: aws_logs_run_query <log_group_name> <start_time> <end_time> <query_string> <region>"
39+
return 1
40+
fi
41+
42+
# Execute the query
43+
local query_id
44+
query_id=$(aws logs start-query \
45+
--log-group-name "$log_group_name" \
46+
--start-time "$start_time" \
47+
--end-time "$end_time" \
48+
--query-string "$query_string" \
49+
--region "$region" \
50+
--query "queryId" \
51+
--output text 2>&1)
52+
53+
# Check for errors
54+
if [[ $? -ne 0 ]]; then
55+
echo "Error starting the query: $query_id"
56+
return 1
57+
fi
58+
59+
echo "$query_id"
60+
}
61+
62+
# Function to get AWS CloudWatch Logs query results
63+
aws_logs_get_query_results() {
64+
local query_id="$1" # The query ID returned by aws_logs_run_query
65+
local region="$2" # The AWS region
66+
67+
# Ensure required parameters are provided
68+
if [[ -z "$query_id" || -z "$region" ]]; then
69+
echo "Error: Missing required arguments."
70+
echo "Usage: aws_logs_get_query_results <query_id> <region>"
71+
return 1
72+
fi
73+
74+
# Wait for the query to complete
75+
local query_status="Running"
76+
while [[ "$query_status" == "Running" || "$query_status" == "Scheduled" ]]; do
77+
echo "Waiting for query results..."
78+
sleep 2
79+
query_status=$(aws logs get-query-results \
80+
--query-id "$query_id" \
81+
--region "$region" \
82+
--query "status" \
83+
--output text 2>&1)
84+
done
85+
86+
# Check if the query was successful
87+
if [[ "$query_status" != "Complete" ]]; then
88+
echo "Error: Query did not complete successfully. Status: $query_status"
89+
return 1
90+
fi
91+
92+
# Retrieve and display query results
93+
local results
94+
results=$(aws logs get-query-results \
95+
--query-id "$query_id" \
96+
--region "$region" \
97+
--output json 2>&1)
98+
99+
if [[ $? -ne 0 ]]; then
100+
echo "Error retrieving query results: $results"
101+
return 1
102+
fi
103+
104+
echo "$results"
105+
}

0 commit comments

Comments
 (0)