Simple Log Service provides a set of search syntax that can be used to specify query conditions. Logs that meet the specified query conditions are returned. You can use the query results in analytic statements for complex data analysis and processing.
Search syntax structure
Syntax
Each query statement consists of a search statement and an analytic statement. The search statement and the analytic statement are separated by a vertical bar (|). A search statement can be executed alone. However, an analytic statement must be executed together with a search statement. You can use the log analysis feature to analyze the data in search results. You can also use the feature to analyze all data in a Logstore.
You do not need to specify the FROM or WHERE clause in an analytic statement. By default, all data of the current Logstore is analyzed.
You do not need to append a semicolon (;) to an analytic statement as the statement terminator.
Analytic statements are not case-sensitive.
Syntax
Search statement|Analytic statement
Statement
Description
Search statement
A search statement specifies one or more search conditions. A condition can be a keyword, a numeric value, a numeric value range, a space character, or an asterisk (*).
If you specify a space character or an asterisk (*) as the search statement, no conditions are specified and all logs are returned. For more information, see Search syntax.
Analytic statement
An analytic statement is used to aggregate or analyze search results or all data in a Logstore.
Example
* | SELECT status, count(*) AS PV GROUP BY status
Statement writing process
You can write a search statement in the following procedure: determine search syntax based on the search type, specify an operator based on the data types of fields, and then determine a match mode.
Step 1: Select a search type
If you want to analyze a specific field, you must create field indexes and use a SELECT statement. For more information about how to create field indexes and full-text indexes, see Create indexes.
Query and analysis results vary based on index configurations. If you create full-text indexes and field indexes, the field indexes take precedence.
If you create only full-text indexes for your Logstore, you can use only full-text search syntax to specify query conditions.
If you create only field indexes for your Logstore, the search syntax that you can use vary based on the data types of fields.
Double and long: You can use only field-specific search syntax to specify query conditions.
Text: If you can identify the field with which a keyword is associated and field indexes are created for the field, we recommend that you use field-specific search syntax to specify query conditions. If you cannot identify the field with which the keyword is associated, we recommend that you use full-text search syntax.
If you use full-text search syntax but full-text indexes are not created for your Logstore, you can query data only from fields whose indexed data is of the text type.
If you use full-text search syntax and full-text indexes are created for your Logstore, you can query data from all fields. In this case, the indexed data of all fields is of the text type.
Full-text search syntax
You cannot query data from a specific field based on full-text search syntax. Full-text search syntax:
keywords1 [ [ and | or | not ] keywords2 ] ...
keywords1 specifies the keyword that you want to use to query data. You can also use asterisks (*) and question marks (?) to perform fuzzy match. To combine query conditions, you can use operators such as and and or.
Example 1: Query logs that contain the Nginx keyword. Search statement: Nginx
.
Example 2: Query logs that contain the Nginx or Tomcat keyword. Search statement: Nginx or Tomcat
.
Field-specific search syntax
You can query data from specific fields based on field-specific search syntax. The fields can be of the text
, long
, double
, or JSON
type. Field-specific search syntax:
indexname1 [ : | > | >= | < | <= | = | in ] keyword1 [ [ and | or | not ] indexname2 ... ]
indexname1 specifies the name of the field from which you want to query data. If a proper noun such as a field name or a table name contains special characters such as spaces and Chinese characters or syntax keywords such as and and or, you must enclose the characters or keywords in double quotation marks (
""
). For more information, see How do I use quotation marks in query statements?If indexes are created for fields of the
long
ordouble
type, you can use the following comparison operators:>
,>=
,<
,<=
,=
, andin
.
Example 1: Query logs whose requestMethod field value is GET. Search statement: requestMethod: GET
.
Example 2: Query logs whose requestTimeSpend field value is greater than 500 ms. Search statement: requestTimeSpend > 500
. The data type of the field is long
.
Example 3: Query logs whose requestMethod field value is GET and requestTimeSpend field value is greater than 500 ms. Search statement: requestMethod: GET and requestTimeSpend > 500
.
Step 2: Determine a field data type
Field data types
When you write a search statement, take note of the characteristics of field data types and use the required operators. This way, you can use the statement to obtain logs in an efficient and accurate manner.
By default, if you enable full-text indexing, the data types of all fields in a log except the
__time__
field are set to text.If you enable field indexing, the data types of the related fields can be Long or Double, Text, and JSON.
Field data type | Description | Supported operator |
You can query data of the string type by setting the data types of related fields to text. By default, if you enable full-text indexing, the data types of all fields in a log except the |
| |
You can query the value of a field by using a numeric range only if you set the data type of the field to long or double.
|
| |
You can set the data type of a field in JSON objects to long, double, or text based on the field value, and turn on Enable Analytics for the field. | Specify operators based on the data types of the fields in JSON objects. |
Operators
The letters of the in operator must be in lowercase. Other operators are not case-sensitive.
Simple Log Service supports the following operators: sort, asc, desc, group by, avg, sum, min, max, and limit. If you want to use these operators as keywords, you must enclose the operators in double quotation marks (
""
).The following operators are listed in descending order of priority:
Colons (:)
Double quotation marks ("")
Parentheses ()
and and not
or
Operator | Description |
: | This operator is used for field-specific searches based on the key:value format. Example: If a field name or a field value contains special characters such as spaces, colons (:), and hyphens (-), you must enclose the field name or field value in double quotation marks (""). Example: |
and | The and operator. Example: If no syntax keywords exist among multiple search keywords, the search keywords are evaluated by using the and operator. For example, |
or | The or operator. Example: |
not | The not operator. Example: |
( ) | This operator is used to increase the priority of the query conditions that are enclosed in parentheses (). Example: |
"" | This operator is used to enclose a syntax keyword. If a syntax keyword is enclosed in double quotation marks (""), the keyword is converted to an ordinary word. For example, In a field-specific search, the words that are enclosed in double quotation marks ("") are considered as a whole. |
\ | The escape character. This character is used to escape double quotation marks (""). Double quotation marks ("") can indicate themselves only after they are escaped. For example, if the content of a log is |
* | The wildcard character. This character is used to match zero, one, or multiple characters. Example: Note Simple Log Service searches all logs and obtains up to 100 words that match the specified conditions. Then, Simple Log Service returns the logs that contain one or more of these words and match the query conditions. |
? | The wildcard character. This character is used to match a single character. Example: |
> | This operator is used to query the logs in which the value of a field is greater than a specified numeric value. Example: |
>= | This operator is used to query the logs in which the value of a field is greater than or equal to a specified numeric value. Example: |
< | This operator is used to query the logs in which the value of a field is less than a specified numeric value. Example: |
<= | This operator is used to query the logs in which the value of a field is less than or equal to a specified numeric value. Example: |
= | This operator is used to query the logs in which the value of a field is equal to a specified numeric value. Equal-signs (=) and colons (:) have the same effect on fields of the double or long type. For example, |
in | This operator is used to query the logs in which the value of a field is within a specified numeric range. Brackets [] indicate a closed interval, and parentheses () indicate an open interval. A space is used to separate two numbers in a numeric range. Example: Important The letters of the in operator must be in lowercase. |
__source__ | This operator is used to query the logs of a specified log source. Wildcard characters are supported. Example: Important The __source__ field is a reserved field in Simple Log Service. This field can be abbreviated to source. If you configure a custom source field, the custom field conflicts with the reserved source field in Simple Log Service. If you want to search for the custom field, you must use Source or SOURCE in the search statement. |
__tag__ | This operator is used to query logs by using metadata. Example: |
__topic__ | This operator is used to query the logs of a specified log topic. Example: |
Step 3: Determine a match mode
You can use exact searches or fuzzy searches based on keywords and your business requirements. If the required logs are not returned, troubleshoot the issue based on the instructions in What do I do if no results are returned when I query a log?
Search type | Description | Example |
Exact search | Complete words are used for searches. Simple Log Service uses word segmentation to query logs. In an exact search, phrases cannot be completely matched. For example, the |
|
Fuzzy search | You can add an asterisk (*) or a question mark (?) as a wildcard character to the middle or end of a word in a search statement when you perform a fuzzy search. The word must be 1 to 64 characters in length. If a word contains a wildcard character, Simple Log Service searches all logs and obtains up to 100 words that match the word. Then, Simple Log Service returns the logs that contain one or more of these words. If you specify more accurate words, the search result is more accurate. Important
A fuzzy search is performed based on samples by using the following mechanism:
|
For more information, see How do I query logs by using fuzzy match? |
Examples of search statements
If you execute a search statement on different logs based on different index configurations, the statement returns different results. The examples provided in this section are based on the following sample log and index configurations.
Sample log
An NGINX access log is used as the sample log.
Index configurations
Before you can execute a search statement, make sure that indexes are configured. For more information, see Create indexes.
On the query and analysis page of your Logstore, click Index Attributes in the upper-right corner and select Attributes.
Check whether indexes are configured. The following figure shows fields for which indexes are configured.
Common search examples
Expected search result | Search statement | Debugging |
Logs that record successful GET requests (status codes: 200 to 299) |
| |
Logs that record GET requests and in which the source region of the requests is not the China (Hangzhou) region |
| None |
Logs that record GET requests or POST requests |
| |
Logs that do not record GET requests |
| |
Logs that record successful GET requests or successful POST requests |
| |
Logs that record failed GET requests or failed POST requests |
| |
Logs that record successful GET requests (status codes: 200 to 299) and in which the request duration is less than 60 seconds |
| |
Logs in which the request duration is equal to 60 seconds |
| |
| ||
Logs in which the request duration is greater than or equal to 60 seconds and is less than 200 seconds |
| |
| ||
Logs in which the request_time field is empty or the value of the field is an invalid number |
Note
| |
Logs that contain the request_time field and in which the value of the field is a number |
| |
Logs that contain and |
Note In this search statement, and is a common string but not an operator. | |
Logs in which the value of the request method field is PUT |
Important The name of the request method field contains spaces. You must enclose the field name in double quotation marks ("") in a search statement. | None |
Logs whose topic is HTTPS or HTTP |
| None |
Logs that are collected from the 192.0.2.1 host |
The Important If a log is processed by using the data transformation feature or a Logtail plug-in, the key in the __tag__:__client_ip__ field is converted to a common key. If you want to search for the log, you must enclose the name of the __tag__:__client_ip__ field in double quotation marks ("") in the search statement. Example: | None |
Logs whose IP addresses match |
For more information, see Use the LIKE clause to implement fuzzy match. | None |
Logs in which the remote_user field is not empty |
| |
Logs in which the remote_user field is empty |
| |
Logs in which the value of the remote_user field is not null |
| |
Logs that do not contain the remote_user field |
| |
Logs that contain the remote_user field |
| |
Logs in which the value of the city field is not Shanghai |
Note If you want to query Chinese strings, you must turn on Include Chinese when you configure indexes. For more information, see Create indexes. | None |
Advanced search examples
Fuzzy searches
Expected search result
Search statement
Debugging
Logs that contain specific words. The words start with cn.
cn*
Logs in which the value of the region field starts with cn.
region:cn*
None
Logs in which the value of the region field contains cn*.
region:"cn*"
NoteIn this search statement,
cn*
is a complete string. Examples:If the content of a log is
region:cn*,en
and the delimiter is a comma (,), Simple Log Service splits the log content intoregion
,cn*
, anden
. You can use the search statement to search for the log.If the content of a log is
region:cn*hangzhou
, Simple Log Service considerscn*hangzhou
as a whole. In this case, you cannot use the search statement to search for the log.
None
Logs that contain specific words. The words start with mozi, end with la, and include one character between mozi and la.
mozi?la
Logs that contain specific words. The words start with mo, end with la, and include zero, one, or more characters between mo and la.
mo*la
Logs that contain specific words. The words start with moz or sa.
moz* and sa*
Logs in which the value of the region field ends with hai.
You cannot use a search statement to search for the logs. You can use the LIKE clause in an SQL statement to search for the logs. For more information, see Use the LIKE clause to implement fuzzy match.
* | select * from log where region like '%hai'
None
Delimiter-based searches
Simple Log Service splits the content of a log into multiple words based on the delimiters that you specify. The default delimiters are
, '";=()[]{}?@&<>/:\n\t\r
. If you leave Delimiter empty, Simple Log Service considers the value of each field as a whole. In this case, you can search for a log only by using a complete string or performing a fuzzy search. For more information about how to specify delimiters, see Create indexes.For example, the value of the http_user_agent field is
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/192.0.2.0 Safari/537.2
.If you leave Delimiter empty, Simple Log Service considers the field value as a whole. In this case, you cannot search for logs by using the
http_user_agent:Chrome
search statement.If you set Delimiter to
, '";=()[]{}?@&<>/:\n\t\r
, Simple Log Service splits the field value intoMozilla
,5.0
,Windows
,NT
,6.1
,AppleWebKit
,537.2
,KHTML
,like
,Gecko
,Chrome
,192.0.2.0
,Safari
, and537.2
. In this case, you can search for logs by using thehttp_user_agent:Chrome
search statement.
NoteIf a search keyword contains delimiters, you can perform a phrase search or use a LIKE clause. Examples:
Phrase search:
#"redo_index/1"
. For more information, see Phrase search.LIKE clause:
* | select * from log where key like 'redo_index/1'
.
Expected search result
Search statement
Debugging
Logs in which the value of the http_user_agent field contains Chrome
http_user_agent:Chrome
Logs in which the value of the http_user_agent field contains Linux and Chrome
http_user_agent:Linux and http_user_agent:Chrome
http_user_agent:"Linux Chrome"
Logs in which the value of the http_user_agent field contains Firefox or Chrome
http_user_agent:Firefox or http_user_agent:Chrome
Logs in which the value of the request_uri field contains /request/path-2
request_uri:/request/path-2
Logs in which the value of the request_uri field starts with /request and does not contain /file-0
request_uri:/request* not request_uri:/file-0
Logs in which the
redo_index/1
phrase is completely matched#"redo_index/1"
* | select * from log where key like 'redo_index/1'
NoteYou can perform a phrase search or use a LIKE clause to completely match the phrase. If you perform an exact search, words such as
redo_index
and1
are matched.None
Query examples in special scenarios
Search statements
If a field name or a field value contains special characters such as spaces, Chinese characters, colons (:), and hyphens (-) or contains syntax keywords such as and and or, you must enclose the field name or field value in double quotation marks ("").
Simple Log Service supports the following operators: sort, asc, desc, group by, avg, sum, min, max, and limit. If you want to use the operators as keywords, you must enclose the operators in double quotation marks ("").
If a log is processed by using the data transformation feature or a Logtail plug-in, the key in a tag field is converted to a common key. If you want to search for the log, you must enclose the name of the key in double quotation marks (""). Example:
"__tag__:__client_ip__":192.0.2.1
. The__tag__:__client_ip__
field is a reserved field of Simple Log Service. The field indicates the IP address of the host from which the log is collected. For more information, see Reserved fields.
Expected query result | Search statement | Debugging |
Logs in which the value of the |
| None |
Logs that are collected from the 192.0.2.1 host. |
| None |
Analytic statements
If a proper noun such as a field name or a table name contains special characters such as spaces, Chinese characters, colons (:), and hyphens (-) or contains syntax keywords such as and and or, you must enclose the proper noun in double quotation marks ("") in analytic statements.
If specific characters represent a string, you must use single quotation marks ('') to enclose the characters in analytic statements. For example,
'status'
indicates the status string, andstatus
or"status"
indicates the status log field.
Expected query result | Query statement | Debugging |
Logs whose IP addresses match |
| None |
For more information, see How do I use quotation marks in query statements?
References
For more information about analytic functions and syntax, see Analytic functions and syntax.
Troubleshooting
Log query examples
You can query JSON logs whose field values are JSON objects or JSON arrays. For more information about query and analysis examples, see Query and analyze JSON logs and FAQ about the query and analysis of JSON logs.