Документ - это документ, описывающий, как может выглядеть содержимое документа, подобного xhtml (например, веб-страницы). Примечание: это определяет только синтаксис указанной страницы, рендеринг страницы НЕ определяется DTD!
Например, doctype может определить, как Wikipedia содержит информативную страницу о различных Doctypes, которые являются общепринятыми. Имейте в виду - нет ничего, что помешает вам создать свой собственный doctype. Однако есть вероятность, что браузер, вероятно, не знает, как сделать ваш документ. Какой DTD использовать зависит от того, что вы собираетесь писать. Например, XHTML имеет целый DTD, отличный от HTML. Вам не нужно использовать условие Для строк журнала API вы можете использовать следующий шаблон: И ваш возврат будет примерно таким: Для В веб-строках вы можете использовать следующий шаблон: И результат будет: Чтобы использовать несколько шаблонов в Grok, просто сделайте это: [ 1115] Или вы можете сохранить свои шаблоны в файл и использовать Если вы все еще хотите использовать условное выражение, просто проверьте что-нибудь в сообщении, например: Я не получаю никакой ошибки, но индексы все еще не создаются вasticsearch. Ниже мои файлы конфигурации. filebeat.yml conf file - тег может выглядеть так: какие атрибуты он принимает, а какие значения / значки принимаются для каждого атрибута. Подумайте об этом как лексике для вашей текущей веб-страницы.
2 ответа
if/else
, чтобы сделать это, вы можете использовать несколько шаблонов, один будет соответствовать строкам журнала API, а другой будет соответствовать строкам журнала WEB. (?:%{TIME:CREATED_ON})(?:%{SPACE})%{WORD:LEVEL}%{SPACE}\[%{NOTSPACE}\]%{SPACE}\(%{NOTSPACE:THREAD}\)%{SPACE}(?:%{DATA})%{SPACE}\[%{DATA}\]%{SPACE}%{WORD}%{SPACE}%{GREEDYDATA:MSG}
{
"MSG": "c.r.s.web.controller.LoginController - Inside initLoginPage() of LoginController",
"CREATED_ON": "00:06:27,899",
"LEVEL": "INFO",
"THREAD": "ajp--0.0.0.0-8009-40"
}
(?:%{TIME:CREATED_ON})(?:%{SPACE})%{WORD:LEVEL}%{SPACE}\[%{NOTSPACE}\]%{SPACE}\(%{NOTSPACE:THREAD}\)%{SPACE}%{DATA}%{WORD:PROTOCOL}%{SPACE}%{WORD:MethodOrStatus}%{SPACE}%{GREEDYDATA:ENDPOINT}
{
"CREATED_ON": "00:06:27,783",
"PROTOCOL": "HTTP",
"ENDPOINT": "http://api.survey.me/v1/getwidgetdetails?profileName=jeremy-steffens&profileLevel=INDIVIDUAL&companyProfileName=premier-nationwide-lending&hideHistory=true",
"LEVEL": "INFO",
"THREAD": "ajp--0.0.0.0-8009-38",
"MethodOrStatus": "GET"
}
grok {
match => ["message", "pattern1", "pattern2"]
}
patterns_dir
, чтобы указать на каталог файла. if "HTTP" in [message] {
grok { your grok for the web messages }
} else {
grok { your grok for the api messages }
}
input {
beats {
port => 5044
}
}
filter {
if [log_type] == "apache-apis" {
grok {
match => { "message" => "^%{IP:CLIENT_IP} (?:-|%{USER:IDEN}) (?:-|%{USER:AUTH}) \[%{HTTPDATE:CREATED_ON}\] \"(?:%{WORD:REQUEST_METHOD} (?:/|%{NOTSPACE:REQUEST})(?: HTTP/%{NUMBER:HTTP_VERSION})?|-)\" %{NUMBER:RESPONSE_CODE} (?:-|%{WORD:BYTES}) (?:-|%{WORD:EXECUTION_TIME})"}
add_field => {
"LOG_TYPES" => "api-log"
}
overwrite => [ "message" ]
}
}
if [log_type] == "apache-webs" {
grok {
match => { "message" => "%{HTTPDATE:CREATED_ON}%{NOTSPACE}%{SPACE} (?:-|%{IP:CLIENT_IP})%{SPACE} %{NOTSPACE}(?:-|%{WORD:REQUEST_METHOD}%{SPACE}) (?:-|%{NOTSPACE:REQUEST})(?: HTTP/%{NUMBER:HTTP_VERSION})%{NOTSPACE}(?:-|%{GREEDYDATA:OTHER_INFO}) (?:-|%{NUMBER:RESPONSE_CODE}) (?:-|%{WORD:BYTES}) (?:-|%{WORD:EXECUTION_TIME})"}
add_field => {
"LOG_TYPES" => "web-log"
}
overwrite => [ "message" ]
}
}
if [log_type] == "jboss-apis" {
grok {
match => { "message" => "%{TIME:CREATED_ON}%{SPACE}%{WORD:LEVEL}%{SPACE}\[%{NOTSPACE:URI_CLASS}\]%{SPACE}\(%{NOTSPACE:THREAD}\)(?<MESSAGE_LOG>[^\r\n]+)((\r?\n)(?<MORE-INFO>(.|\r?\n)+))?"}
add_field => {
"LOG_TYPES" => "jboss-api"
}
overwrite => [ "message" ]
}
}
if [log_type] == "jboss-webs" {
grok {
match => { "message" => "(?:%{TIME:CREATED_ON})(?:%{SPACE})(?:%{WORD:LEVEL})%{SPACE}\[%{NOTSPACE}\]%{SPACE}\(%{NOTSPACE:THREAD}\)%{SPACE}(?:%{TIME})(?:%{SPACE})%{SPACE}\[%{NOTSPACE}\]%{SPACE}(?:%{SPACE})%{WORD:LEVEL}%{SPACE}%{JAVACLASS:CLASS} - (?<MESSAGE_LOG>[^\r\n]+)((\r?\n)(?<extra>(.|\r?\n)+))?"}
add_field => {
"LOG_TYPES" => "jboss-web"
}
}
grok {
match => { "message" => "(?:%{TIME:CREATED_ON})(?:%{SPACE})(?:%{WORD:LEVEL})%{SPACE}\[%{NOTSPACE}\]%{SPACE}\(%{NOTSPACE:THREAD}\)%{SPACE}%{NOTSPACE}%{SPACE}%{WORD:PROTOTYPE}%{SPACE}(?:%{NOTSPACE:STATUS})(?:%{SPACE})(?:%{URI:URI_CLASS})"}
add_field => {
"LOG_TYPES" => "jboss-web"
}
}
grok {
match => { "message" => "%{TIME:CREATED_ON}%{SPACE}%{WORD:LEVEL}%{SPACE}\[%{NOTSPACE}\]%{SPACE}\(%{NOTSPACE:THREAD}\)\ (?<MESSAGE_LOG>[^\r\n]+)\n%{SPACE}%{NOTSPACE}%{SPACE}%{JAVACLASS:URI-CLASS}"}
add_field => {
"LOG_TYPES" => "jboss-web"
}
}
}
}
output {
if [log_type] == "apache-apis" or [log_type] == "apache-webs" {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "apache-server-logs"
}
}
if [log_type] == "jboss-apis" or [log_type] == "jboss-webs" {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "jboss-server-logs"
}
}
stdout { codec => rubydebug }
}
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/user/path/originallogs/apache/api/a-api.log
fields:
log_type: apache-apis
fields_under_root: true
- type: log
enabled: true
paths:
- /home/user/path/originallogs/apache/web/a-web.log
fields:
log_type: apache-webs
fields_under_root: true
- type: log
enabled: true
paths:
- /home/user/path/originallogs/jboss/api/jboss-api-log.log
fields:
log_type: jboss-apis
fields_under_root: true
- type: log
enabled: true
paths:
- /home/user/path/originallogs/jboss/web/jboss-web-log.log
fields:
log_type: jboss-webs
fields_under_root: true
#exclude_lines: ['^DBG']
#include_lines: ['^ERR', '^WARN']
Похожие вопросы: