logstash+elasticsearch+kibana3

本文介绍如何通过Logstash、Elasticsearch和Kibana(ELK)搭建一套集中的日志监控和分析系统,包括各组件的安装配置及部署过程。
日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志。logstash+elasticsearch+kibana3就是实现这样功能的一套系统,并且功能更强大。

    logstash是一个管理日志和事件的工具,你可以收集它们,解析它们,并存储它们以供以后使用(例如日志搜索),logstash有一个内置的web界面,用来搜索你的所有日志。logstash在部署时有两种运行模式:standalone和centralized:

   * standalone:standalone的意思是所有的事情都在一台服务器上运行,包括日志收集、日志索引、前端WEB界面都部署在一台机器上。

   * centralized:就是多服务器模式,从很多服务器运输(ship)日志到一台总的日志(collector)服务器上用来索引和查找。

    需要注意的是logstash本身并没有什么shipper和collector这种说法,因为不论是运输日志的进程还是汇集总的日志的进程运行的都是同一个程序,只是使用的配置文件不同而已。


elasticsearch:

    基于lucene的开源搜索引擎,是一个分布式的搜索分析系统,主要特点有:real time data、real time analytics、distributed、high availability、multi-tenancy、full text search、document oriented、conflict management、schema free、restful api等等。

kibana3:

    可视化日志和数据系统,作为WEB前端可以很容易的和elasticsearch系统结合。kibana有版本2和版本3的区分,版本2采用ruby编写,部署起来很麻烦,需要安装很多ruby依赖包(目前网上多是这个版本的部署),版本3采用纯html+css编写,因此部署起来很方便,解压即用。

两台机器试验,ubuntu12.04

    10.20.112.27:logstash index、kibana

    10.20.112.26:logstash agent、elasticsearch、redis


logstash我们必然采用centralized模式了:



先部署10.20.112.26

1 安装redis,也可以使用其他存储介质,参看官方doc的input配置

    
apt-get install redis-server
  修改配置/etc/redis/redis.conf的监听地址
 
#bind 127.0.0.1
bind 0.0.0.0

  重启redis:/etc/init.d/redis-server restart

2 安装JDK和Ruby  logstash需要
 
apt-get install openjdk-7-jdk
apt-get install ruby rubygems

3 安装elasticsearch

    
cd /opt
wget 'https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz'
tar zxvf elasticsearch-0.90.7.tar.gz
cd elasticsearch-0.90.7/bin
#可以在logstash agent启动后再启动
./elasticsearch -f

  会在屏幕上输出如下消息:

    
[2013-11-28 13:51:11,038][INFO ][node                     ] [Harpy] version[0.90.7], pid[17473], build[36897d0/2013-11-13T12:06:54Z]
[2013-11-28 13:51:11,039][INFO ][node                     ] [Harpy] initializing ...
[2013-11-28 13:51:11,045][INFO ][plugins                  ] [Harpy] loaded [], sites []
[2013-11-28 13:51:14,351][INFO ][node                     ] [Harpy] initialized
[2013-11-28 13:51:14,352][INFO ][node                     ] [Harpy] starting ...
[2013-11-28 13:51:14,462][INFO ][transport                ] [Harpy] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/10.20.112.26:9300]}
[2013-11-28 13:51:17,509][INFO ][cluster.service          ] [Harpy] new_master [Harpy][gvDXLMGyTUiyJ3YT3At_1Q][inet[/10.20.112.26:9300]], reason: zen-disco-join (elected_as_master)
[2013-11-28 13:51:17,586][INFO ][discovery                ] [Harpy] elasticsearch/gvDXLMGyTUiyJ3YT3At_1Q
[2013-11-28 13:51:17,715][INFO ][http                     ] [Harpy] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/10.20.112.26:9200]}
[2013-11-28 13:51:17,731][INFO ][node                     ] [Harpy] started
[2013-11-28 13:51:18,873][INFO ][gateway                  ] [Harpy] recovered [2] indices into cluster_state

4 下载安装logstash
 
cd /opt
wget 'https://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar'
  logstash是一个jar包,需要自己创建一个配置文件即可:logstash.agent.conf
input {
     
    file  {
           type => "linux-syslog"
            path => [ "/var/log/lastlog", "/var/log/test", "/var/log/syslog","/var/log/lastlog" ]
          }
 
}
     
output {
         redis {
         host => "10.20.112.26"
         data_type =>"list"
         key => "logstash"
        }
}
5  启动logstash shipper

    
cd /opt
java -jar logstash-1.2.2-flatjar.jar agent -f logstash.agent.conf

    间隔几十秒后,会在输出如下信息:
   
Using milestone 2 input plugin 'file'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}
Using milestone 2 output plugin 'redis'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}

  logstash命令使用:
 
logstash的命令行标志:
agent
   -f    configfile     加载logstash的配置文件,可以是文件、目录、通配符,如果是目录或者通配符,则读取第一个匹配到的文件
   -e   configset     设置一些配置文件中的配置
   -w   count          设置filter的工作者个数,默认是1
   -l     logfile         设置日志路径,默认是stdout
web
   -a    address      启动一个webserver,默认监听0.0.0.0
   -p    port           webserver监听的地址,默认是9292


再部署10.20.112.27

1 安装ruby和JDK
 
apt-get install openjdk-7-jdk
apt-get install ruby
2 安装logstash indexer
   
cd /opt
wget 'https://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar'
   logstash是一个jar包,需要自己创建一个配置文件即可:logstash.index.conf

    
#/opt/logstash.index.conf
input {
    redis
    {
    host => "10.20.112.26"
    data_type =>"list"
    port => "6379"
    key => "logstash"
    type => "redis-input"
    }
 
}
 
output
    {
    elasticsearch {
    host => "10.20.112.26"
    port => "9300"
    }
}
3 启动logstash indexer


    
cd /opt
java -jar logstash-1.2.2-flatjar.jar  agent -f logstash.index.conf

  屏幕上会出现如下信息:

    
Using milestone 2 input plugin 'redis'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}
Using milestone 1 codec plugin 'json'. This plugin should work, but would benefit from use by folks like you. Please let us know if you find bugs or have suggestions on how to improve this plugin.  For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}
PORT SETTINGS 10.20.112.26:9300

4 安装apache2和kibana3
 
apt-get install apache2
wget 'https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone4.tar.gz'
tar zxvf kibana-3.0.0milestone4.tar.gz -C /var/www/
cd /var/www/kibana-3.0.0milestone4
mv * ../
cd ..
rm -fr kibana-3.0.0milestone4
###vi config.js 修改配置文件
#elasticsearch: "http://"+window.location.hostname+":9200",
elasticsearch: "http://10.20.112.26:9200",
5 访问10.20.112.27



    并没有如想象中的看到数据图,注意我红框中的内容,这只是kibana3的默认界面,需要我们用logstash.json代替default.json界面,具体目录源码目录下app/dashboards中。
 
cd /var/www/app/dashboards
rm default.json
mv logstash.json default.json
  这时候访问即可看到正常界面

    logstash的配置文件相当简单,主要有三部分:inputs、filters、outputs。事件在配置文件中的出现是有顺序的。在inputs、output、filter中,允许你设置配置插件,配置插件由一个插件名称和紧跟在后面的插件配置代码块构成。插件中的值可以是布尔值、字符串、数字、哈希、数组等,并且支持条件判断(if...else)。

下面分析一下input的file的配置:

    
input {
  file {
    add_field => ... # hash (optional), default: {}
    codec => ... # codec (optional), default: "plain"
    debug => ... # boolean (optional), default: false
    discover_interval => ... # number (optional), default: 15
    exclude => ... # array (optional)
    path => ... # array (required)
    sincedb_path => ... # string (optional)
    sincedb_write_interval => ... # number (optional), default: 15
    start_position => ... # string, one of ["beginning", "end"] (optional), default: "end"
    stat_interval => ... # number (optional), default: 1
    tags => ... # array (optional)
    type => ... # string (optional)
}
 
}
下面分析一下output的file的配置:

output {
  file {
    codec => ... # codec (optional), default: "plain"
    flush_interval => ... # number (optional), default: 2
    gzip => ... # boolean (optional), default: false
    max_size => ... # string (optional)
    message_format => ... # string (optional)
    path => ... # string (required)
    workers => ... # number (optional), default: 1
}
 
}


基本的搭建就ok了,接着就是使用了

1 logstash的配置文件主要用到的配置项在:http://logstash.net/docs/1.2.2/

2 elasticsearch提供了restful api,我们也可以不借用kibana来自己获取里面的信息,api接口:

   http://elasticsearch-py.readthedocs.org/en/latest/

   http://www.elasticsearch.org/guide/en/elasticsearch/client/python-api/current/_overview.html

参考官方文档:

logstash:http://logstash.net/

elasticsearch:http://www.elasticsearch.org/

kibana:http://www.elasticsearch.org
DHCP(Dynamic Host Configuration Protocol)日志通常记录在系统日志文件中,例如 `/var/log/messages` 或 `/var/log/syslog`,具体取决于操作系统和配置。为了使用 Elastic Stack(ElasticsearchLogstash、Filebeat 和 Kibana)收集和分析 DHCP 日志,可以按照以下步骤进行配置。 ### 1. 部署 Filebeat 收集日志 Filebeat 是一个轻量级的日志收集器,用于监控日志文件并将数据发送到 LogstashElasticsearch。 #### 安装并配置 Filebeat 编辑 Filebeat 的配置文件 `filebeat.yml`,指定 DHCP 日志的路径以及 Logstash 的地址: ```yaml filebeat.inputs: - type: log enabled: true paths: - /var/log/syslog # 或 /var/log/messages,根据系统而定 - /var/log/dhcpd.log # 如果 DHCP 服务单独输出日志 output.logstash: hosts: ["logstash-server:5044"] ``` 启动 Filebeat: ```bash sudo systemctl start filebeat ``` ### 2. 配置 Logstash 解析 DHCP 日志 Logstash 负责接收日志数据,并进行解析和格式化。 #### 创建 Logstash 配置文件 `dhcp.conf` ```ruby input { beats { port => 5044 } } filter { grok { match => { "message" => "<%{POSINT:priority}>%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:$$%{POSINT:pid}$$)?: %{GREEDYDATA:message}" } } if [program] == "dhcpd" { grok { match => { "message" => "%{DHCPD}" } } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } output { elasticsearch { hosts => ["elasticsearch-server:9200"] index => "dhcp-logs-%{+YYYY.MM.dd}" } } ``` 启动 Logstash 并加载该配置文件: ```bash bin/logstash -f dhcp.conf ``` ### 3. 在 Elasticsearch 中存储 DHCP 日志 Elasticsearch 接收 Logstash 发送的数据,并按照指定的索引格式存储日志。 #### Elasticsearch 基本配置(可参考引用[3]) ```yaml # elasticsearch.yml 示例 node.name: dhcp-node network.host: 0.0.0.0 http.port: 9200 cluster.initial_master_nodes: ["dhcp-node"] ``` 确保 Elasticsearch 正常运行,并允许 Logstash 通过 9200 端口写入数据。 ### 4. 使用 Kibana 分析和可视化 DHCP 日志 Kibana 提供了图形化界面,用于查询和可视化存储在 Elasticsearch 中的日志数据。 #### 在 Kibana 中配置索引模式 1. 打开 Kibana Web 界面(默认地址为 `http://kibana-server:5601`)。 2. 进入 **Management > Stack Management > Index Management**。 3. 创建索引模式 `dhcp-logs-*`。 4. 选择时间字段为 `timestamp`。 #### 创建可视化图表 1. 进入 **Visualize** 页面,点击 **Create visualization**。 2. 选择 **Lens** 或 **Vega** 等可视化工具。 3. 例如,可以创建一个柱状图展示每天的 DHCP 请求量,或一个饼图展示不同类型的 DHCP 操作(如 DHCPREQUEST、DHCPACK 等)。 ### 5. 示例 DHCP 日志解析 假设原始 DHCP 日志内容如下: ``` Mar 10 14:23:45 dhcp-server dhcpd: DHCPREQUEST for 192.168.1.100 (192.168.1.1) from 00:1a:2b:3c:4d:5e via eth0 ``` 通过 Grok 解析后,Logstash 会提取出以下字段: - `timestamp`: `Mar 10 14:23:45` - `hostname`: `dhcp-server` - `program`: `dhcpd` - `message`: `DHCPREQUEST for 192.168.1.100 (192.168.1.1) from 00:1a:2b:3c:4d:5e via eth0` ### 6. 高级分析与告警 可以使用 Kibana 的 **Discover** 功能进行自由查询,也可以使用 **Alerting** 功能设置阈值告警,例如当 DHCP 分配失败次数超过一定数量时触发告警。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值