在运维工作中,Logstash 作为数据采集和处理的核心工具,支持多种输入源,能够从不同的数据源中收集数据。以下是 Logstash 常见的输入源及其配置方式:

1. 文件(File)

从本地文件或日志文件中读取数据,适用于采集服务器上的日志文件。

配置示例:

input {

file {

path => "/var/log/nginx/access.log"

start_position => "beginning"

sincedb_path => "/dev/null"

}

}

2. Beats

接收来自 Filebeat 或其他 Beats 的数据,常用于与轻量级采集器配合使用。

配置示例:

input {

beats {

port => 5044

}

}

3. Kafka

从 Kafka 主题中消费数据,适用于大规模分布式消息队列场景。

配置示例:

input {

kafka {

bootstrap_servers => "localhost:9092"

topics => ["logs"]

}

}

4. JDBC(数据库)

从数据库中读取数据,支持多种数据库(如 MySQL、PostgreSQL 等)。

配置示例:

input {

jdbc {

jdbc_driver_library => "/path/to/mysql-connector-java.jar"

jdbc_driver_class => "com.mysql.cj.jdbc.Driver"

jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"

jdbc_user => "root"

jdbc_password => "password"

schedule => "* * * * *"

}

}

5. Syslog

接收 Syslog 数据,适用于传统的系统日志采集。

配置示例:

input {

syslog {

port => 514

}

}

6. HTTP

通过 HTTP 接收数据,适用于从 Web 应用或其他服务接收日志。

配置示例:

input {

http {

port => 8080

}

}

7. TCP/UDP Socket

支持基于 TCP 或 UDP 协议的日志传输,适用于网络设备或应用的日志采集。

配置示例:

input {

tcp {

port => 5000

}

udp {

port => 5001

}

}

8. Redis

从 Redis 数据库或 Redis Pub/Sub 中读取数据,适用于缓存和消息队列场景。

配置示例:

input {

redis {

data_type => "list"

key => "logstash"

host => "localhost"

port => 6379

}

}

9. AWS Kinesis Data Streams

基于 AWS 服务的流式日志采集,适用于云原生应用。

配置示例:

input {

aws_kinesis {

stream_name => "my-kinesis-stream"

region => "us-east-1"

}

}

10. JMS

从 JMS 消息队列中读取数据,适用于企业级消息中间件。

配置示例:

input {

jms {

destination => "queue:MyQueue"

topic => "topic:MyTopic"

jndi_jms_url => "vm://localhost:5447"

jndi_context => {

java.naming.factory.initial => "org.apache.activemq.jndi.ActiveMQInitialContextFactory"

java.naming.provider.url => "vm://localhost:5447"

java.naming.factory.queue => "org.apache.activemq.ActiveMQQueue"

java.naming.factory.topic => "org.apache.activemq.ActiveMQTopic"

}

}

}

11. 其他输入源

Logstash 还支持其他多种输入源,如串口设备(Serial Port)、Grok(基于正则表达式匹配日志字段)等。

综上所述,通过这些输入源,Logstash 可以灵活地从各种数据源中采集数据,满足不同场景下的日志和数据处理需求。