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 ...
随机推荐
- java 内部类、匿名内部类
一:内部类 1:什么是内部类? 大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的 ...
- Linux 系统的安全加固
Linux是一套免费使用和自由传播的类Unix操作系统,作为一个开放源代码的操作系统,Linux服务器以其安全.高效和稳定的显著优势而得以广泛应用,但如果不做好权限的合理分配,Linux系统的安全性还 ...
- servlet报错“严重: Allocate exception for servlet 类名java.lang.ClassNotFoundException: 路径. 类名”可能原因
1.WEB-INF下web.xml中<servlet-class>路径错误,正确路径为 <servlet-class>包名.类名</servlet-class> 2 ...
- 在QT中添加LIB的方法
注意:-L后面跟着的目录不能用空格,否则会出现读不到的情况. 例如win32下添加D:\app\my.lib 就 pro文件中 LIBS += -LD:\app\debug\ -lmy
- QT QListWidget去掉滚动条
1.去掉滚动条 设置样式 包含背景色等更改 setStyleSheet("QListWidget{color:gray;font-size:12px;background:#FAFAFD; ...
- C#【堆与栈 值类型 引用类型】
先说C#中值类型和引用类型 概念: 1.值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据. 2.引用类型:表示指向存储在内存堆中的数据的指针或引用(包括类.接 ...
- android适配知识总结
一.http适配 背景:API升级到28以后,不再支持明文的网络请求,只支持https请求.运行所报错误:java.net.UnknownServiceException: CLEARTEXT com ...
- @ComponentScan注解及其XML配置
开发中会经常使用包扫描,只要标注了@Controller.@Service.@Repository,@Component 注解的类会自动加入到容器中,ComponentScan有注解和xml配置两种方 ...
- Spring Cloud(六)服务网关 zuul 快速入门
服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...
- 使用JS和PHP导出table表格
把table表格的内容导出成excel 或者word等格式(简单容易不需要太多php) 导出需注意 1. 样式都在行间,导出excel表格会继承样式包括colspan.rowspan,非表格元素,样式 ...