12、elk的使用(2)
12.8、收集日志:
因为logstash安装在从节点上,所以这里收集的主要是从节点上的服务日志;
1、收集系统日志:
(1)配置文件:
vim /etc/logstash/conf.d/system-log.conf
input {
file {
path => "/var/log/messages"
type => "system_log"
start_position => "beginning"
stat_interval => "2"
}
file {
path => "/var/log/lastlog"
type => "system_last_log"
start_position => "beginning"
stat_interval => "2"
}
}
output {
if [type] == "system_log" {
elasticsearch {
hosts => ["172.16.1.90:9200"]
index => "logstash-system_log-%{+yyyy.MM.dd}"
}
}
if [type] == "system_last_log" {
elasticsearch {
hosts => ["172.16.1.90:9200"]
index => "logstash-system_last_log-%{+yyyy.MM.dd}"
}
}
}
1)参数说明:
A、input file插件:
a、path:
代表日志文件路径;
b、type:
表示自定义的日志类型;
c、start_position:
beginning、end
选择Logstash最初开始读取文件的位置,开头或结尾。默认行为将文件视为实时流,因此默认从最后开始。
如果您要导入旧数据,请将其设置为开头,但是如果记录过文件的读取信息,这个配置也就失去作用了,会从最后端读取;
d、stat_interval:
表示收集日志的间隔时间,默认是1秒,增加此间隔将减少我们进行的系统调用次数,但会增加检测新日志行的时间;
B、output elasticsearch插件:
a、host:
表示elasticsearch集群的地址,集群中任意一节点的地址都可,因为集群的数据是共享的;
b、index:
表示索引的名称;
C、具体参数可以查看官方帮助文档:https://www.elastic.co/guide/en/logstash/current/index.html
(2)验证配置文件:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system-log.conf -t
Configuration OK
(3)修改日志文件的权限:
chmod 755 /var/log/
chmod 644 /var/log/messages
chmod 644 /var/log/lastlog
(4)重启logstash服务:
systemctl restart logstash
tailf /var/log/logstash/logstash-plain.log
[2019-05-10T20:12:37,900][INFO ][logstash.agent] Successfully started Logstash API endpoint {:port=>9600}
(5)查看索引是否已经添加到集群:
1)在elasticsearch插件中查看:
2)在kibana中查看:
3)提示:如果没有看到内容,可能是没有日志文件中没有内容,手动在相应的日志文件中添加几条即可;
(6)在kibana中对elasticsearch集群中的当前索引进行过滤:
1)
2)
3)
4)同上理可以将logstash-system_last_log-2019.05.11索引在kibana中进行过滤;说明:elasticsearch对文本的处理较好,如果是二进制文件等特殊文件会报错;
2、收集nginx日志:
(1)nginx日志转化为json:
1)安装nginx:
yum instal nginx
2)配置文件:
vim /etc/nginx/nginx.conf #在nginx配置文件的http模块进行如下操作;
…………………………
http {
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
log_format access_json '{"@timestamp":"$time_iso8601",'
'"server_addr":"$server_addr",'
'"remote_addr":"$remote_addr",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_addr":"$upstream_addr",'
'"uri":"$uri",'
'"http_referer":"$http_referer",'
'"http_user_agent":"$http_user_agent",'
'"http_x_forwarded_for":"$http_x_forwarded_for",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status":"$status"}';
access_log /var/log/nginx/access.log access_json;
…………………………
}
3)检查配置文件:
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4)启动nginx:
systemctl start nginx.service
5)访问nginx:
yum install httpd-tools -y
ab -n10000 -c100 http://172.16.1.91/index.html
6)验证日志:
tail -1 /var/log/nginx/access.log
{"@timestamp":"2019-05-11T01:21:06+08:00","server_addr":"172.16.1.91","remote_addr":"172.16.1.254",
"body_bytes_sent":0,"request_time":0.000,"upstream_response_time":"-","upstream_addr":"-","uri":"/index.html",
"http_referer":"-","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"http_x_forwarded_for": "-","remote_user": "-","request": "GET / HTTP/1.1","status":"304"}
(2)配置logstash:
1)配置日志收集文件:
vim nginx-access-log.conf
input{
file {
path => "/var/log/nginx/access.log"
type => "nginx_access_log"
start_position => "beginning"
stat_interval => "2"
}
}
output{
if [type] == "nginx_access_log" {
elasticsearch {
hosts => ["172.16.1.90:9200"]
index => "logstash-nginx_access_log-%{+YYYY.MM.dd}"
}
}
}
2)验证配置文件:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx-access-log.conf -t
Configuration OK
3)更改日志权限:
chmod 755 /var/log/nginx/
chmod 644 /var/log/nginx/access.log
4)重启logstash服务:
systemctl restart logstash
tailf /var/log/logstash/logstash-plain.log
[2019-05-11T09:32:01,033][INFO ][logstash.agent] Successfully started Logstash API endpoint {:port=>9600}
5)访问nginx:
ab -n10000 -c100 http://172.16.1.91/index.html
6)查看日志索引是否添加成功:
(3)在kibana中对elasticsearch集群中的当前索引进行过滤:
1)
2)
3)
3、收集tomcat日志:
(1)tomcat日志转json格式:
1)安装tomcat:
yum installl tomcat
2)配置主配置文件:
vim /etc/tomcat/server.xml #修改日志配置如下;
…………………
<!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="tomcat_access_log" suffix=".log"
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"/>
</Host>
…………………
3)在站点添加index.html测试文件:
mkdir -p /usr/share/tomcat/webapps/test/
echo "tomcat" >/usr/share/tomcat/webapps/test/index.html
4)启动tomcat:
systemctl start tomcat
5)访问tomcat服务:
ab -n1000 -c100 http://172.16.1.91:8080/test/
tail -1 /var/log/tomcat/tomcat_access_log2019-05-11.log
{"clientip":"172.16.1.91","ClientUser":"-","authenticated":"-","AccessTime":"[11/May/2019:21:37:46 +0800]","method":"GET /test/ HTTP/1.0","status":"200","SendBytes":"7","Query?string":"","partner":"-","AgentVersion":"ApacheBench/2.3"}
6)验证json格式:
(2)配置logstash:
1)配置日志收集文件:
vim /etc/logstash/conf.d/tomcat-access-log.conf
input{
file {
path => "/var/log/tomcat/tomcat_access_log*.log"
type => "tomcat_access_log"
start_position => "beginning"
stat_interval => "2"
}
}
output{
if [type] == "tomcat_access_log" {
elasticsearch {
hosts => ["172.16.1.90:9200"]
index => "logstash-tomcat_access_log-%{+YYYY.MM.dd}"
}
}
}
2)验证配置文件语法:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat-access-log.conf -t
Configuration OK
3)修改权限:
chmod 755 /var/log/tomcat/
tomcat日志文件默认是644,所以不用进行修改;
4)重启logstash:
systemctl restart logstash.service
tailf -1 /var/log/logstash/logstash-plain.log
[2019-05-11T23:18:24,701][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
5)访问tomcat站点:
ab -n10000 -c1000 http://172.16.1.91:8080/test/index.html
6)查看索引是否被添加到elasticsearch集群:
(3)在kibana中对elasticsearch集群中的当前索引进行过滤:
1)
2)
3)
4、收集java日志:
(0)日志内容和使用语法:
1)日志示例:
tail -3 /data/logs/elk-cluster.log
[2019-05-11T20:07:17,215][INFO ][o.e.n.Node ] [elk-node2] started
[2019-05-11T20:08:09,702][INFO ][o.e.m.j.JvmGcMonitorService] [elk-node2] [gc][young][62][20] duration [763ms], collections [1]/[1.6s], total [763ms]/[2.9s], memory [225.8mb]->[147.8mb]/[1.
9gb], all_pools {[young] [84.5mb]->[4.1mb]/[133.1mb]}{[survivor] [5.2mb]->[6.8mb]/[16.6mb]}{[old] [136mb]->[136.8mb]/[1.8gb]}[2019-05-11T20:08:09,704][INFO ][o.e.m.j.JvmGcMonitorService] [elk-node2] [gc][62] overhead, spent [763ms] collecting in the last [1.6s]
提示:默认情况下一条日志就是一行,如果有特殊情况需要合并日志的需要使用该语法;
2)日志合并语法:
input {
stdin {
codec => multiline { #使用multiline插件
pattern => "pattern, a regexp" #正则匹配
negate => "true" or "false" #匹配是否成功
what => "previous" or "next" #和上面的还是和下面的内容合并
}
}
(1)配置logstash日志收集文件:
vim /etc/logstash/conf.d/elasticsearch-access-log.conf
input {
file {
path => "/data/logs/elk-cluster.log"
type => "logstash-elasticsearch_access_log"
start_position => "beginning"
stat_interval => "2"
codec => multiline {
pattern => "^\["
negate => "true"
what => "previous"
}
}
}
output {
if [type] == "logstash-elasticsearch_access_log" {
elasticsearch {
hosts => ["172.16.1.90:9200"]
index => "logstash-elasticsearch_access_log-%{+YYYY.MM.dd}"
}
}
}
(2)检查配置文件:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/elasticsearch-access-log.conf -t
Configuration OK
(3)修改日志权限:
chmod 755 /data/logs/
chmod 644 /data/logs/elk-cluster.log
(4)重启logstash服务:
systemctl restart logstash
tailf -1 /var/log/logstash/logstash-plain.log
[2019-05-12T00:25:43,814][INFO ][logstash.agent] Successfully started Logstash API endpoint {:port=>9600}
(5)查看索引是否被添加到elasticsearch集群:
(6)在kibana中对elasticsearch集群中的当前索引进行过滤:
1)
2)
3)
5、收集tcp网络日志:
tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们
通过在其他logstash上启用tcp模块,监听某个端口,然后我们在这个服务器A把日志通过nc发送到logstash上即可。
(1)配置logstash日志收集文件:
vim /etc/logstash/conf.d/tcp-log.conf
input {
tcp{
port => "5600"
mode => "server"
type => "tcp_5600"
}
}
output {
if [type] == "tcp_5600" {
elasticsearch {
hosts => ["172.16.1.90:9200"]
index => "logstash-tcp_5600-%{+YYYY.MM.dd}"
}
}
}
(2)检查配置文件:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp-log.conf -t
Configuration OK
(3)重启logstash服务:
systemctl restart logstash
tail -1 /var/log/logstash/logstash-plain.log
[2019-05-12T12:05:25,367][INFO ][logstash.agent] Successfully started Logstash API endpoint {:port=>9600}
netstat -tunlp | grep 5600
tcp6 0 0 :::5600 :::* LISTEN 4120/java
(4)通过tcp发送测试数据:
[root@controller-node1 ~]# chmod 755 /var/log/
[root@controller-node1 ~]# chmod 644 /var/log/boot.log
[root@controller-node1 ~]# nc 172.16.1.91 5600 </var/log/boot.log
(5)查看索引是否被添加到elasticsearch集群:
1)
2)
(6)在kibana中对elasticsearch集群中的当前索引进行过滤:
1)
2)
3)
12.9、小结:
1、数据在集群中是分片、副本(主从备份共享)的方式进行存储;kibana和elasticsearch-head都是查看、过滤集群数据的网页浏览
软件,可以安装在集群中任何一台服务器上,可以访问集群中任意一台上的数据,但是需要开启elasticsearch的跨域访问功能;
2、在不重启logsta服务的情况下测试日志收集功能:
vim /etc/logstash/conf.d/nginx-access-log.conf
input{
file {
path => "/var/log/nginx/access.log"
type => "nginx_access_log"
start_position => "beginning"
stat_interval => "2"
}
}
output{
if [type] == "nginx_access_log" {
stdout {
codec => rubydebug
}
file {
path => "/tmp/logstash-nginx_access_log-%{+YYYY.MM.dd}.log"
}
}
}
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx-access-log.conf
12、elk的使用(2)的更多相关文章
- ELK实践(一):基础入门
虽然用了ELK很久了,但一直苦于没有自己尝试搭建过,所以想抽时间尝试尝试.原本打算按照教程 <ELK集中式日志平台之二 - 部署>(作者:樊浩柏科学院) 进行测试的,没想到一路出了很多坑, ...
- ELK处理Spring Boot 日志,妙!
在排查线上异常的过程中,查询日志总是必不可缺的一部分.现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难. 工欲善其事,必先利其器.如果此时有一个统一的实时日志分析平台,那 ...
- ELKStack之极速入门(上)
ELKStack之极速入门(上) 链接:https://pan.baidu.com/s/1V2aYpB86ZzxL21Hf-AF1rA 提取码:7izv 复制这段内容后打开百度网盘手机App,操作更方 ...
- ELK6环境搭建
(一)什么是ELK Stack ELK 到底是什么呢? "ELK"是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kibana. E ...
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- 在mybatis中写sql语句的一些体会
本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...
- 12.10、elk实用案例
1.架构图: 服务器名称 ip地址 controller-node1(主) 172.16.1.90 slave-node1(从) 172.16.1.91 2.安装filebeat: filebeat不 ...
- 12、elk的使用(1)
12.0.架构图: 服务器名称 ip地址 controller-node1(主) 172.16.1.90 slave-node1(从) 172.16.1.91 12.1.elk介绍: (1)ELK是三 ...
- ELK——在 CentOS/Linux 把 Kibana 3.0 部署在 Nginx 1.9.12
上一篇文章<安装 logstash 2.2.0.elasticsearch 2.2.0 和 Kibana 3.0>,介绍了如何安装 Logstash.Elasticsearch 以及用 P ...
随机推荐
- [转载]centos 7(1611)安装笔记
centos 7(1611)安装笔记 麻烦 前天我把双系统笔记本里的 deepin 的磁盘分区直接从 Windows 7 磁盘管理里格式化了,结果悲催了,开不了机了,显示: 我以为是 Window ...
- g77介绍 g77 是 Fortran77 的编译器。它对 Fortran 77 标准提供完备的支持,并支持 Fortran 90 和 95 的部分特性。 由于 Fortran 77 标准在数值计算中的影响力,g77 可能是应用最广的Fortran编译器。 在 GCC 4.0 之前,g77 是 GCC 的一部分,但现在,g77 已经停止开发。
GFORTRAN 维基百科,自由的百科全书 跳到导航 跳到搜索 此条目需要扩充. (2018年11月2日)请协助改善这篇条目,更进一步的信息可能会在讨论页或扩充请求中找到.请在扩充条目后将此模 ...
- 二进制格式安装MySQL
二进制格式安装MySQL 下载二进制格式的mysql软件包 下载二进制格式的 mysql 软件包 [root@localhost ~]# cd /usr/src/ [root@localhost sr ...
- Linux性能分析利器——火焰图的安装使用
火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的 ...
- hugboy源库
=[个人整理的一些源库,均来自网络]= -[Ubuntu]- #阿里源 Ubuntu 20.04 deb http://mirrors.aliyun.com/ubuntu/ focal main re ...
- 串口配合DMA接收不定长数据(空闲中断+DMA接收)-(转载)
1.空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断: 2.空闲中断是接收到一个数据以后,接收停顿超过一字节时间 认为桢收完,总线空闲中断是在检测到在接收数据后, ...
- MyBatis 数据源的原理和机制
回顾JDBC JDBC访问数据库流程 加载驱动 获取Connection连接对象(消耗性能) 获取PrepareStatement对象 执行SQL语句 获取结果集 关闭Connection连接对象 存 ...
- rm删除破折号开头的文件或目录
转载地址:http://blog.chinaunix.net/uid-25266990-id-3458755.html rm删除(清除)一个或多个文件 -f 选项将强制删除文件,即使这个文件是只读的. ...
- C语言关于指针函数与函数指针个人理解
1,函数指针 顾名思义,即指向函数的指针,功能与其他指针相同,该指针变量保存的是所指向函数的地址. 假如是void类型函数指针定义方式可以是 void (*f)(参数列表);亦可以先用 typedef ...
- vue+element-ui, el-upload组件 文件上传之前return false,会自动调用文件移除回调问题
日常搬砖的时候,项目中在使用element-ui的上传组件,但是当我在文件上传文件之前的回调里面做了些文件格式的二次校验和文件大小的校验的时 然后 return false 会发现调用 文件移除的回调 ...