目前线上环境(ubuntu server)终于部署好一个logstash日志收集系统了

断断续续的看了一周logstash的文档,总算在线上ubuntu搭建起来一个logstash环境了。现在分享一下自己的经验

关于logstash

这玩意现在还算是火爆,依托于elasticsearch这棵大树下,logstash的关注度是非常高的,项目目前来说算是活跃。logstash是一个用于日志收集、分析的系统,架构设计非常灵活,几乎可以满足各种规模的需求。

logstash的逻辑架构

logstash的逻辑架构其实一点都不复杂,经历收集->过滤->输出三个步骤即可简简单单的筛选与管理日志,这简简单单的三个步骤经过符合业务规模的设计之后,就可以满足各种规模的需求了。

logstash的配置文件也很简单

input { }

filter { }

output { }

经过这三个基本配置段,就可以筛选出符合自己要求的日志了。

一些参考资料

说实话,logstash的官方文档实在是太过于简略了,我第一次看完之后完全一抹黑,根本不会写,后来是看了官方推荐的《logstash book》这本书之后才慢慢了解清楚logstash到底怎么回事。因此这本书也是强烈推荐的。不过新版本的书目前还没找到免费的,我当时看的是1.3.4版本的,虽然版本低了些,和现在的logstash有些不太一样(不再使用fatjar打包了,而是直接用bash脚本传参给ruby脚本启动),不过主体功能没多大变化,配合官方文档的一些说明还是可以学习的。

其他可以google一些别人写的配置做参考

我用的业务模型

我的规模其实很小,就收集几个服务器的java程序的日志(log4j输出),推送到中央服务器进行查看而已,必要的时候进行报警。

因此我采用的规模是这样的, 在线上服务器上(input => file, filter => grok, output => tcp),从日志文件中接受输入,使用grok正则过滤器进行提取日志,使用tcp协议直接发送到中央日志服务器上进行收集和展示。

在日志服务器上(input => tcp, output => elasticsearch and email),不增加中央服务器太高的负载,将正则过滤部分放在产品服务器上,中央服务器只是收集过滤过的日志之后做一下索引展示而已,整套架构没有用到redis,因为我的规模量比较少,日志也很少,没必要用redis存储日志,只索引日志用于查询就够了。

我的配置

理清了使用的架构之后,那么写配置就非常容易了。

在产品服务器上配置如下:

input {
    file {
        type => "my_app"
        path => "/var/log/tomcat7/my_app.log"
        tags => [ "my_app", "log4j" ]
        codec => multiline {
            pattern => "^%{TIMESTAMP_ISO8601}"
            negate => true
            what => "previous"
        }
    }
}

filter {
    if [type] == "my_app" {
        grok {
            match => { "message" =>
                "%{TIMESTAMP_ISO8601:date} \[(?<thread_name>.+?)\] (?<log_level>\w+)\s*(?<content>.*)"
            }
        }

        if [log_level] == "ERROR" and "Invalid password for user" not in [content] {
            throttle {
                after_count => 2
                key => "%{content}"
                add_tag => "throttled"
            }
        }
    }
}

output {
    tcp {
        codec => json_lines
        host => "center.com"
        mode => "client"
        port => "tcp_port"
    }
}

过滤这样的日志:

          date                 thread_name            log_level                      content
           |                         |                   |                              |
2015-01-27 10:37:32,131 [ajp-apr-127.0.0.1-8009-exec-2] INFO  mobile.ShortMessageService  - {success=true}
2015-01-27 10:41:18,447 [ajp-apr-127.0.0.1-8009-exec-1] ERROR security.UserService  - grails.validation.ValidationException: Validation Error(s) occurred during save():

在日志服务器配置如下

input {
    tcp {
        codec => json_lines
        host => "0.0.0.0"
        mode => "server"
        port => "tcp_port"
    }
}

filter {
    if ! [tags] or ! [type] {
        drop { }
    }
}

output {
    elasticsearch_http {
        host => "localhost"
    }

    if "throttled" not in [tags] and [type] == "my_app" and [log_level] == "ERROR" and "Invalid password for user" not in [content] ) {
        email {
            body => "%{message}"
            from => "[email protected]"
            contenttype => "text/plain; charset=UTF-8"
            options => [
                "smtpIporHost", "smtp.email.com",
                "userName", "login_name",
                "password", "password",
                "authenticationType", "login"
            ]
            subject => "服务器%{host} %{type}日志发现异常: %{content}"
            to => "[email protected]"
        }
    }
}

这样,一个初步可用的logstash就搭建好了,也能适应我目前的规模了。展示到页面上用的是kibana这个项目,也是elasticsearch旗下的项目,使用和配置都很简单,就不再细说了。

批量部署

配置都测试完毕,就剩下批量部署了,使用的(saltstack)(http://docs.saltstack.com/en/latest/),给logstash添加一个state,也很简单:

cat /srv/salt/logstash.sls

#logstash_repo:
#  pkgrepo.managed:
#    - name: deb http://packages.elasticsearch.org/logstash/1.4/debian stable main
#    - file: /etc/apt/sources.list.d/logstash.list
#    - key_url: http://packages.elasticsearch.org/GPG-KEY-elasticsearch
#
#logstash:
#  pkg.latest:
#    - refresh: True

logstash:
  pkg.installed:
    - sources:
      - logstash: http://myserver/downloads/logstash_1.4.2-1-2c0f5a1_all.deb

logstash-config:
  file.recurse:
    - name: /etc/logstash/conf.d
    - source: salt://servers/logstash/conf.d/
    - makedirs: True

logstash-service:
  service.running:
    - name: logstash
    - enable: True
    - watch:
      - pkg: logstash
      - file: logstash-config

注释部分是logstash的官方源,参考这里,不过我这边使用实在是太慢了,不利于批量部署。不得已,只好自己下载deb包放在自己的服务器上,使用pkg.install中的sources指令从自己的服务器下载deb包安装了。

最后,使用salt ‘*‘ state.sls logstash搞定,批量部署完毕,日志都上来了

时间: 2024-10-17 02:26:55

目前线上环境(ubuntu server)终于部署好一个logstash日志收集系统了的相关文章

线上环境的回滚机制

[场景描述]你是否遇到过这种情况,在正常运行的线上环境下要要重新发布一个项目, [正常的操作如下]: 1.先把tomcat关掉: 2.删掉tomcat下的项目文件(按需备份),把war包放在tomcat对应正确路径下解压: 3.重启tomcat,重启后发现部署失败代码有问题则执行4,否则结束. 4.部署出错,赶紧关闭tomcat,把上一个版本/备份拷回来,再重启tomcat,结束.... 是不是觉得太low?这里tomcat关闭重启的时间太长了,并且有可能要来回拷贝解压两次~!不能忍,来巧妙使用

简要的线上环境部署概览

谈到线上环境,一般开发同学,不太容易接触到.即使接触到,也只是其中的冰山一角! 所以,其实说起线上环境的部署,咱们好像都有点懂,但是又都不一定完全懂!网上的知识无穷无尽,但往往都是各司一职,对于普通同学,很难窥其全貌! 所以,我今天就来说说,一些普通的线上环境的部署步骤,和一些脚本小技巧吧.只希望通过这篇文章,能够让大家有一个运维的全局! 我将会分几条线来整理咱们的运维思路! 一.从理论上讲,我们应该怎么做? 1. 针对的是什么样的用户群体,体量大量会有多少? 这是一个部署规划的前题.为啥呢?

Docker + node(koa) + nginx + mysql 线上环境部署

在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建

使用Fabric批量部署上线和线上环境监控

本文讲述如何使用fabric进行批量部署上线的功能 这个功能对于小应用,可以避免开发部署上线的平台,或者使用linux expect开发不优雅的代码. 前提条件: 1.运行fabric脚本的机器和其他机器tcp_port=22端口通 2.ssh可以登录,你有账号密码 一.先说批量部署上线 先上代码,再仔细讲解,脚本如下 # -*- coding:utf-8 -*- from fabric.colors import * from fabric.api import * from contextl

express框架开发接口部署线上环境PM2

1.PM2介绍 PM2是一个线上环境下,用于启动nodejs进程守护的工具,用来保证服务的稳定及分摊服务器进程和压力. 2.下载安装 npm install pm2 -g  => pm2 --version  => 在package.json scripts中配置 "prd": "cross-env NODE_ENV=production pm2 start app.js" =>  npm run prd运行,运行结果如下图: 3.常用命令 启动:

Nginx、Tomcat线上环境优化配置

 Nginx.Tomcat线上环境优化配置 Nginx优化: Nginx安全方面的优化: 1. nginx安全优化,在nginx配置文件http标签段内添加"server_tokens  off"即可隐藏访问或者报错时提示web版本号信息. 2. server_tokens参数可以在http,server,location的位置添加 3. 还可以修改nginx的3个源码文件 4. 如还需要安全优化更改端口.用户. nginx 性能优化: 对于nginx配置文件中对优化比较有作用的一般为

【微信小程序】---线上环境搭建

一.前言 通常我们在本地电脑上开发微信小程序,调用和访问小程序会有很多问题.特别是在配有自己后端的情况下,我们通过真机访问我们的小程序会出现不可访问的问题 二.线上环境搭建 在这里我们主要以腾讯云给大家做演示 1.注册并登陆腾讯云   https://cloud.tencent.com/ 2.上传代码 a.把客户端代码和服务端代码放置在微信小程序目录下 b.将客户端代码放置到client文件加中,服务端代码放置在server文件加中 c.把原微信小程序project.config.js文件转移到

[Nginx笔记]关于线上环境CLOSE_WAIT和TIME_WAIT过高

运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了. 首先是TIME_WAIT: 理解一下TIME_WAIT状态产生的原因,这个问题已经被很多很多的书说烂了,但是为什么很多人还是不能解决,究其原因还是因为 大多数都是学术派,并没有真正的遇到过这样的问题,因为TIME_WAIT大量产生很多都发生在实际应用环境中. TIME_WAIT产生的原因还是因为在通讯过程中服务端主动关闭

Ubuntu Server 安装部署 Cacti 服务器监控

Ubuntu Server 安装部署 Cacti 服务器监控 form :http://www.cnblogs.com/xuri/p/3379337.html