数据收集引擎 Logstash 简介

1. 安装 Logstash;

# 下载和 Elasticsearch 相同版本
cd /usr/local/src
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.0.tar.gz

# 解压到指定安装目录
tar zxvf logstash-7.5.0.tar.gz -C /usr/local/logstash

# 按需修改配置文件
vim /usr/local/logstash/config/logstash.yml
# 设置名称
node.name: master-1
# 设置远程访问
http.host: "0.0.0.0"

2. 调试;

  • 以下为基本的 Logstash 管道来测试 Logstash 设置

2.1 标准输出;

# 启动
cd /usr/local/logstash
bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 当出现 Successfully started Logstash API endpoint {:port=>9600},启动成功

# 控制台输入:hello world
# logstash 处理后会在控制台输出:
{
       "message" => "hello world",
      "@version" => "1",
    "@timestamp" => 2019-12-25T05:21:20.995Z,
          "host" => "hua-PC"
}

2.2 标准输出至 ElasticSearch;

bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } stdout {} }'
# 启动成功后,控制台输入:hello world
# logstash 处理后会在控制台输出:
{
    "@timestamp" => 2019-12-25T05:22:09.561Z,
      "@version" => "1",
       "message" => "hello world",
          "host" => "hua-PC"
}

进入 ElasticSearch 查看,数据已经写入(下图)
在这里插入图片描述

2.3 使用配置文件;

  • 场景 1:通过配置文件、监听指定目录下的文件,读取文件内容做标准输出
# 新建配置文件
cd /usr/local/logstash
vim test.conf
# 写入如下内容
input {
    file { path => "/usr/local/logstash/test.txt" }
 }
output {
     stdout {}
 }

# 保存退出,重启 logstash
bin/logstash -f test.conf

# 新开一个控制台,往 /usr/local/logstash/test.txt 文件里写内容
vim /usr/local/logstash/test.txt
# 写入字符串:hello world
# 保存退出

# 回到启动 logstash 的控制台,控制台输出:
{
          "path" => "/usr/local/logstash/test.txt",
       "message" => "hello world",
      "@version" => "1",
    "@timestamp" => 2019-12-24T05:45:23.743Z,
          "host" => "hua-PC"
}
  • 场景 2:通过配置文件、标准输出至 ElasticSearch
vim test2.conf
# 写入如下
input { stdin { } }
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout {}
}
# 保存退出,重启 logstash
bin/logstash -f test2.conf

2.4 通过配置文件读取日志输出至 ElasticSearch;

  • 场景:收集本机 Nginx 和 MySQL 日志
cd /usr/local/logstash
vim test3.conf
# 写入如下内容
input {
    file {
        path => "/usr/local/nginx/logs/error.log"
        type => "nginx_error_log"
        start_position => "beginning"
    }
 
    file {
        path => "/usr/local/nginx/logs/access.log"
        type => "nginx_access_log"
        start_position => "beginning"
    }
    
 	file {
        path => "/data/mysql/log/mysqld.log"
        type => "mysql_error_log"
        start_position => "beginning"
    }
}
 
output {
 
    if [type] == "nginx_error_log" {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "nginx_error_log-%{+YYYY.MM.dd}"
        }
    }
 
    if [type] == "nginx_access_log" {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "nginx_access_log-%{+YYYY.MM.dd}"
        }
    }

	if [type] == "mysql_error_log" {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "mysql_error_log-%{+YYYY.MM.dd}"
        }
    }

}
# 保存退出,重启 logstash
bin/logstash -f test3.conf
# 效果如下图

## 可能发生的问题:
# 第一次配置时,运行 Logstash 对日志文件进行的读取操作,然后输出到了 ElasticSearch
# 这个过程 Logstash 会记录自己读取完日志文件的位置,然后将自己读取内容的偏移量保存到一个隐藏文件 .sincedb_*
# 重启 Logstash 后从隐藏文件中的读取完成的日志文件位置知道,日志文件并没有发生改变
# 所以 Logstash 并没有对日志文件再次进行读取,所以控制台没有任何输出
# 解决方案 1:删除隐藏文件 隐藏文件 .sincedb_*
cd /usr/local/logstash/data/plugins/inputs/file
rm .sincedb_*
# 解决方案 2:input file 下配置 sincedb_path => "/dev/null"

在这里插入图片描述

发布了119 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hualaoshuan/article/details/103696072
今日推荐