第二十三周微职位elk日志系统
利用ELK+redis搭建一套nginx日志分析平台。
logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队列,redis的list结构正好可以作为队列使用。然后分析使用elasticsearch就可以进行分析和查询了。
我们需要的是一个分布式的,日志收集和分析系统。logstash有agent和indexer两个角色。对于agent角色,放在单独的web机器上面,然后这个agent不断地读取nginx的日志文件,每当它读到新的日志信息以后,就将日志传送到网络上的一台redis队列上。对于队列上的这些未处理的日志,有不同的几台logstash indexer进行接收和分析。分析之后存储到elasticsearch进行搜索分析。再由统一的kibana进行日志web界面的展示。
下面我计划在一台机器上实现这些角色。
准备工作
1 2 3 4 5 | 安装了redis,开启在 6379 端口 安装了elasticsearch, 开启在 9200 端口 安装了kibana, 开启了监控web logstash安装在 / usr / local / logstash nginx开启了日志,目录为: / usr / share / nginx / logs / test.access.log |
设置nginx日志格式
在nginx.conf 中设置日志格式:logstash
1 2 3 | log_format logstash '$http_host $server_addr $remote_addr [$time_local] "$request" ' '$request_body $status $body_bytes_sent "$http_referer" "$http_user_agent" ' '$request_time $upstream_response_time' ; |
在vhost/test.conf中设置access日志:
1 | access_log / usr / share / nginx / logs / test.access.log logstash; |
开启logstash agent
注:这里也可以不用logstash,直接使用rsyslog
创建logstash agent 配置文件
1 | vim / usr / local / logstash / etc / logstash_agent.conf |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | input { file { type = > "nginx_access" path = > [ "/usr/share/nginx/logs/test.access.log" ] } } output { redis { host = > "localhost" data_type = > "list" key = > "logstash:redis" } } |
启动logstash agent
1 | / usr / local / logstash / bin / logstash - f / usr / local / logstash / etc / logstash_agent.conf |
这个时候,它就会把test.access.log中的数据传送到redis中,相当于tail -f。
开启logstash indexer
创建 logstash indexer 配置文件
1 | vim / usr / local / logstash / etc / logstash_indexer.conf |
代码如下:
input {
redis {
host => "localhost"
data_type => "list"
key => "logstash:redis"
type => "redis-input"
}
}
filter {
grok {
match => [
"message", "%{WORD:http_host} %{URIHOST:api_domain} %{IP:inner_ip} %{IP:lvs_ip} \[%{HTTPDATE:timestamp}\] \"%{WORD:http_verb} %{URIPATH:baseurl}(?:\?%{NOTSPACE:request}|) HTTP/%{NUMBER:http_version}\" (?:-|%{NOTSPACE:request}) %{NUMBER:http_status_code} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{NUMBER:time_duration:float} (?:%{NUMBER:time_backend_response:float}|-)"
]
}
kv {
prefix => "request."
field_split => "&"
source => "request"
}
urldecode {
all_fields => true
}
date {
type => "log-date"
match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z"]
}
} output {
elasticsearch {
embedded => false
protocol => "http"
host => "localhost"
port => "9200"
index => "access-%{+YYYY.MM.dd}"
}
}
这份配置是将nginx_access结构化以后塞入elasticsearch中。
对这个配置进行下说明:
1 2 3 4 5 | grok中的match正好匹配和不论是GET,还是POST的请求。 kv是将request中的A = B&C = D的key,value扩展开来,并且利用es的无schema的特性,保证了如果你增加了一个参数,可以立即生效 urldecode是为了保证参数中有中文的话进行urldecode date是为了让es中保存的文档的时间为日志的时间,否则是插入es的时间 好了,现在的结构就完成了,你可以访问一次test.dev之后就在kibana的控制台看到这个访问的日志了。而且还是结构化好的了,非常方便查找 |
使用kibana进行查看
依次开启es,logstash,kibana之后,可以使用es的head插件确认下es中有access-xx.xx.xx索引的数据,然后打开kibana的页面,第一次进入的时候会让你选择mapping,索引名字填写access-*,则kibana自动会创建mapping
本文转自xinrenbaodao 51CTO博客,原文链接:http://blog.51cto.com/11832904/1972468,如需转载请自行联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
LINUX下安装HPL/SQL
环境要求: Java 1.6 及以上版本 Hadoop 1.x 或 2.x版本 本例环境信息: Linux version:CentOS release 6.8 (Final) Hadoop version:hdp 2.4.0.0-169 Java version:jre-1.8.0-openjdk.x86_64 下载hpl/sql安装包 下载地址:http://www.hplsql.org/download 下载完成后上传到linux平台 解压安装包并安装到/opt: tar -zvxf hplsql-0.3.31.tar.gz -C /opt in -s /opt/hplsql-0.3.31 /opt/hplsql 解压后包含以下文件 hplsql hplsql.cmd hplsql-x.x.x.jar hplsql-site.xml antlr-runtime-4.5.jar 修改权限: chmod +x /opt/hplsql 配置CLASSPATH cd /opt/hplsql vi hplsql 如果是hadoop为CDH 删除hplsql文件中所有的e...
- 下一篇
hive 权限:Authorization failed:No privilege 'Create' found for outputs .
创建表报错: create table test ( name string ); Authorization failed:No privilege 'Create' found for outputs { database:dbname}. Use show grant to get more details. 解决办法: 1.给当前用户权限: hive> set; 用户: system:user.name=hadoop 给用户hadoop 在数据库 dbname 创建表的权限: hive> grantcreateon databasedbnameto userhadoop; 其他权限也可以: all是全部权限。 如: grant all on database dbname to user hadoop; 2.在其他有权限的数据库创建表 比如 当前用户在db1里面有权限,而在dbname里面是没有的那么可以: use db1; create table dbname.test ( name string ); 这样也可以创建。 本文转自茄子_2008博客园博...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群