elastic search&logstash&kibana 学习历程(三)Logstash使用场景和安装部署
Logstash基本介绍和使用场景
自我认为:logstash就是日志的采集收集,日志的搬运工,实时去采集日志。读取不同的数据源,并进行过滤,开发者自定义规范输出到目的地。日志的来源很多,如系统日志,应用日志等等(同类软件:filebeat)
官方文档:https://www.elastic.co/guide/en/logstash/current/index.htm
工作传输流程

在centos7上安装logstash
下载 logstash-6.2..tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz tar -xvf logstash-6.2..tar.gz
cd logstash-6.2./ 修改配置文件:(基本配置)
logstash.yml 修改 pipeline.workers,根据CPU核数增加1到2即可
jvm.options 修改 xms和xmx为相同,一般是系统内存三份之二
input filter output数据流程测试
logstash配置文件vim logstash.conf
input {
file { # 从文件读取日志信息
path => "/var/log/messages" #文件所在的路径
type => "system" #类型是system类型
codec => "json" #日志格式时json格式时打开
start_position => "beginning" #从哪里开始读,beginning
}
}
filter {
mutate{ #切割插件
split => ["message","|"] #通过|切割为message的数组
}
}
output {
elasticsearch {
#stdout { codec => rubydebug } #格式化控制台输出
hosts => ["localhost:9200"] #输出到es中
index => "logstash-test-%{type}-%{host}" #输出到哪个索引中去
}
}
logstash 常用插件
案例1:
input{
file{
path => "/var/log/messages" #路径可以通过数组传多个路径 ["path1","path2"]
type => "system"
start_position => "beginning" #如果不加这个参数默认从文件的末尾去手机
}
}
output{
elasticsearch{
hosts => ["192.168.1.127:9200"] #地址是你es的地址
index => "message-%{+YYYY.MM.dd}" #添加到es中的message+当前日期的索引中,如果没有这个索引就新建
}
stdout{ codec => rubydebug}
} 案例二 通过type不同将日志加入不同的索引中
input{
file{
path => "/var/log/messages"
type => "system" #在此处设置类型
start_position => "beginning"
}
file{
path => "/temp/elasticsearch-6.2.4/logs/my-es.log"
type => "elasticsearch" #在此处设置类型
start_position => "beginning"
}
}
output{
if [type] == "system" { #判断类型
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "message-%{+YYYY.MM.dd}"
}
} if [type] == "elasticsearch" { #判断类型
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "elasticsearch-%{+YYYY.MM.dd}"
}
}
stdout{ codec => rubydebug}
} 案例三 input{
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
file{
path => "/temp/elasticsearch-6.2.4/logs/my-es.log"
type => "elasticsearch"
start_position => "beginning"
codec => multiline{ #设置日志的分割格式,不是按每一行进行分割 只是在碰到[进行分割为一个事件。
pattern => "^\["
negate => true
what => "previous"
}
}
}
output{
if [type] == "system" {
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "message-%{+YYYY.MM.dd}"
}
} if [type] == "elasticsearch" {
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "elasticsearch-%{+YYYY.MM.dd}"
}
}
stdout{ codec => rubydebug}
}
针对nginx的访问日志收集
修改nginx的日志格式 根据实际情况vim /usr/local/nginx/conf/nginx.conf
http{
log_format json '{"@timestamp":"$time_iso8601",' #时间戳格式(否则logstash会一直有警告)
'"client":"$remote_addr",'
'"url":"$uri",'
'"status":"$status",'
'"domain":"$host",'
'"host":"$server_addr",'
'"size":"$body_bytes_sent",'
'"responsetime":"$request_time",'
'"referer":"$http_referer",'
'"ua":"$http_user_agent"'
'}';
server{
access_log logs/access_json.log json;
}
} 配置logstash
input{
file{
path => "/usr/local/nginx/logs/access_json.log"
type => "nginx"
start_position => "beginning"
codec => json
}
}
filter{
if [client] == "192.168.1.129"{ #碰到client为192.168.1.129的主机访问丢弃
drop{}
}
geoip { #基于访问ip确定地理位置需要下载配合数据库wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
source => "client" #访问的IP地址
target => "geoip"
database => "/temp/logstash-6.2.4/GeoLite2-City_20180501/GeoLite2-City.mmdb" #解压后的mmdb文件位置
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
}
}
output{
#stdout{}
#stdout { codec => rubydebug }
if [type] == "nginx"{
elasticsearch{
hosts=>["192.168.1.127:9200"]
index => "iroad-nginx-access-%{+YYYY.MM.dd}"
}
}
}
syslog 和logstash对接
写logstash配置文件
input{
syslog{
type => "system-syslog"
host => "192.168.1.127"
port => "524"
}
}
output{
stdout{
codec => rubydebug
}
}
启动logstash
vim /etc/rsyslog.conf #修改配置文件使系统日志文件直接写到远程端口
将下图中的打开 填写你logstash中配好好的ip和端口
重新启动 systemctl restart rsyslog.service

重新启动rsyslog就会有数据显示在终端

input插件的tcp应用
input{
tcp{
host => "192.168.1.127"
port => ""
}
output{
stdout{
codec => rubydebug
}
}
filter插件的使用 mysql慢查询日志
input{
file{
path => "/temp/log/mysql-slow1.log"
type => "mysql_slowlog"
start_position => "beginning"
codec => multiline {
pattern => "# User@Host"
negate => "true"
what => "previous"
}
}
}
filter{
grok{
match => {
"message" => "(?m)^# User@Host: %{USER:User}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:Client_IP})?\]\s.*# Query_time: %{NUMBER:Query_Time:float}\s+Lock_time: %{NUMBER:Lock_Time:float}\s+Rows_sent: %{NUMBER:Rows_Sent:int}\s+Rows_examined: %{NUMBER:Rows_Examined:int}\s*(?:use %{DATA:Database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<Query>(?<Action>\w+)\s+.*)\n# Time:.*$"
}
}
date {
match => [ "timestamp", "UNIX" ]
remove_field => [ "timestamp" ]
}
}
output{
# stdout{
# codec => rubydebug
# }
elasticsearch {
hosts => ["192.168.1.127:9200"]
index => "mysql_slow-%{+YYYY.MM.dd}"
}
}
tomcat和nginx小案例
input{
file{
path => "/usr/local/nginx/logs/access_json.log"
type => "nginx"
start_position => "beginning"
codec => json
}
file{
path => "/home/app/tomcat/apache-tomcat-8.5.8/logs/*\.txt"
type => "tomcat"
start_position => "beginning"
codec => json
}
}
filter{
if [client] == "192.168.1.129"{
drop{}
}
if [url] =~ ".*\/setBusinessGps\.json\ HTTP\/1.0" {
drop{}
}
if [url] =~ ".*\ \/iroad-service\/.*\.json\ HTTP\/1.0$"{
grok {
tag_on_failure => "通用"
}
}
if [url] =~ ".*\ \/iroad-view\/.*\ HTTP\/1.0$"{
grok {
tag_on_failure => "中山h5"
}
}
geoip {
source => "client"
target => "geoip"
database => "/temp/logstash-6.2.4/GeoLite2-City_20180501/GeoLite2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
}
output{
#stdout{}
#stdout { codec => rubydebug }
if [type] == "nginx"{
elasticsearch{
hosts=>["192.168.1.127:9200"]
manage_template => true
index => "logstash-iroad-nginx-access-new-%{+YYYY.MM.dd}"
}
}
if [type] == "tomcat"{
elasticsearch{
hosts=>["192.168.1.127:9200"]
manage_template => true
index => "logstash-iroad-tomcat-access-new-%{+YYYY.MM.dd}"
}
}
}
input和output与redis(list)消息队列实现解耦

输出到redis中
input{
stdin{}
}
filter{ }
output{
redis {
host => "192.168.1.162"
port => ""
db => ""
data_type => "list" #应用的是redis的list列表
key => "demo" #定义key
}
}
从redis中输入
input{
redis {
host => "192.168.1.162"
port => ""
db => ""
data_type => "list" #应用的是redis的list列表
key => "demo" #从key="demo"中取出
}
}
filter{ }
output{
elasticsearch {
hosts => ["192.168.1.127:9200"]
index => "redis-%{YYYY.MM.dd}"
}
}
input插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
filter插件:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
output插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
目录文件说明:https://www.elastic.co/guide/en/logstash/6.2/dir-layout.html
配置详解:https://www.elastic.co/guide/en/logstash/6.2/logstash-settings-file.html
elastic search&logstash&kibana 学习历程(三)Logstash使用场景和安装部署的更多相关文章
- elastic search&logstash&kibana 学习历程(四)kibana安装部署和使用
kibana在linux上的部署安装 运行环境是centos7 基于jdk8 下载安装包:wget https://artifacts.elastic.co/downloads/kibana/kiba ...
- elastic search&logstash&kibana 学习历程(一)es基础环境的搭建
elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...
- elastic search&logstash&kibana 学习历程(二)es基础知识
简介:es的index索引,document文档对象,副本,多节点集群等基础知识 1.通俗的解释: 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中 ...
- docker安装elastic search和kibana
安装目标 使用docker安装elastic search和kibana,版本均为7.17.1 安装es 1. docker pull 去dockerhub看具体版本,这里用7.17.1 docker ...
- kvm虚拟化学习笔记(三)之windows kvm虚拟机安装
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境
一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...
- Elastic Search和Kibana入门
一.ES配置 二.ES本地快速搭建集群 查看ES集群 查看node详细情况 三.Kibana配置 修改kibana的es配置 访问localhost:5601端口 四.Elasticsearch 术语 ...
- 基础知识——Cocos2d-x学习历程(三)
1.场景与流程控制 我们把一些内容相对不变的游戏元素集合称作场景(scene),把游戏在场景之间切换的过程叫做流程控制(flow control). 在Cocos2d-x中,场景的实现是Scene. ...
- 区块链开发学习第三章:私有链上部署helloBlockchain简单合约
前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...
随机推荐
- 【hash表】收集雪花
[哈希和哈希表]收集雪花 题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有n个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集 ...
- USB协议基础知识
ref : https://blog.csdn.net/u010142953/article/details/82627591 USB 基本知识 USB的重要关键概念: 1. 端点:位于USB设备 ...
- MyBatis 源码篇-SQL 执行的流程
本章通过一个简单的例子,来了解 MyBatis 执行一条 SQL 语句的大致过程是怎样的. 案例代码如下所示: public class MybatisTest { @Test public void ...
- centos中拉取postgre
新搭建好的linux服务器环境,docker也配置好了. 第一步,下载postgre docker pull postgres:11 这里的版本号自己按照自己的需要来获取. 然而实际上没那么顺利,直接 ...
- Js 判断数组中是否包含某个值
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false. JavaScript Array includes() 方法
- VBA学习资料分享-3
VBA创建/发送OUTLOOK邮件时怎么加上默认签名呢?用过OUTLOOK写邮件的人都知道,如果你设置了默认签名,那么在创建空白邮件的时候就会自动加上你设置的签名.根据这一特性,我们可以在用VBA创建 ...
- java web开发跨域问题
分布式环境,前后端分离背景下跨域问题 1.1 设置页面document.domain去把2个页面之间的跨域交互统一 一级域名相同的情况下 调用者和页面提供者进行一个协调 页面提供者要在document ...
- vue项目中图片预览旋转功能
最近项目中需要在图片预览时,可以旋转图片预览,在网上找了下,发现有一款功能强大的图片组件:viewerjs. git-hup: https://github.com/fengyuanchen/view ...
- JTree实现QQ好友列表
最近学习了一下JTree的使用方法: 先来看一下树的实例: 构建一个树, DefaultMutableTreeNode root = new DefaultMutableTreeNode(" ...
- [转]TCP的三次握手与四次挥手
TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 ...