为什么用到ELK:
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据 传输-能够稳定的把日志数据传输到中央系统 存储-如何存储日志数据 分析-可以支持 UI 分析 警告-能够提供错误报告,监控机制 ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
ELK简介:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Filebeat隶属于Beats。目前Beats包含四种工具:
Packetbeat(搜集网络流量数据) Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据) Filebeat(搜集文件数据) Winlogbeat(搜集 Windows 事件日志数据)
本篇文章工作
1.安装kibana
2.安装logstash
3.配置logstash
4.kibana上查看日志
5.收集nginx日志
6.使用beats采集日志
上一篇 参考Elasticsearch的使用
安装kibana
可以通过官网下载然后上传到服务器
也可以服务器下载 解压即可
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.1-linux-x86_64.tar.gz
tar –zxvf kibana-6.2.1-linux-x86_64.tar.gz
复制
安装完成后,对kibana进行配置:
vim /usr/local/elk/kibana/config/kibana.yml # 增加以下内容
server.port: 5601 # 配置kibana的端口
server.host: ip # 配置监听ip
elasticsearch.url: "http://ip:9200" # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip
logging.dest: /var/log/kibana.log # 配置kibana的日志文件路径,不然默认是messages里记录日志
复制
创建日志文件:
touch /var/log/kibana.log; chmod 777 /var/log/kibana.log
复制
启动kibana服务,并检查进程和监听端口:
cd /usr/local/elk/kibana/bin
./kibana
ps aux |grep kibana
netstat -lntp |grep 5601
复制
注:由于kibana是使用node.js开发的,所以进程名称为node
然后在浏览器里进行访问,如:http://192.168.77.128:5601/ ,由于我们并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的:
到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。
安装logstash
安装方法和kibnan一样 通过下载安装包解压
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.1.tar.gz
tar -zxvf logstash-6.2.1.tar.gz
复制
安装完之后,先不要启动服务,先配置logstash收集nginx日志:
首先需要编辑配置文件,这一步在logstash服务器上完成:
vim /usr/local/elk/logstash/conf.d/nginx.conf # 增加如下内容
input {
file { # 指定一个文件作为输入源
path => "/tmp/elk_access.log" # 指定文件的路径
start_position => "beginning" # 指定何时开始收集
type => "nginx" # 定义日志类型,可自定义
}
}
filter { # 配置过滤器
grok {
match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"} # 定义日志的输出格式
}
geoip {
source => "clientip"
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["ip:9200"]
index => "nginx-test-%{+YYYY.MM.dd}"
}
}
复制
编辑完配置文件之后,还需要检测配置文件是否有错:
cd /usr/local/elk/logstash/bin
./logstash --path.settings /usr/local/elk/logstash/ -f /usr/local/elk/logstash/conf.d/nginx.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
复制
命令说明: --path.settings 用于指定logstash的配置文件所在的目录 -f 指定需要被检测的配置文件的路径 --config.testandexit 指定检测完之后就退出,不然就会直接启动了 检查完毕之后,进入你的nginx主机配置文件所在的目录中,修改配置文件:
server {
listen 80;
#server_name '';
location / {
proxy_pass http://192.168.77.128:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /tmp/elk_access.log main2;
}
复制
配置nginx的主配置文件,因为需要配置日志格式,在 logformat combinedrealip 那一行的下面增加以下内容:
vim /usr/local/nginx/conf/nginx.conf
log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$upstream_addr" $request_time';
复制
完成以上配置文件的编辑之后,检测配置文件有没有错误,没有的话就reload重新加载:
/usr/local/nginx/sbin/nginx -t
nginx: [warn] conflicting server name "aaa.com" on 0.0.0.0:80, ignored
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
复制
这时在浏览器上就可以通过这个域名进行访问了
直接输入ip地址即可因为是80端口
访问成功后,查看生成的日志文件:
ls /tmp/elk_access.log
/tmp/elk_access.log
wc -l !$
wc -l /tmp/elk_access.log
45 /tmp/elk_access.log
复制
如上,可以看到,nginx的访问日志已经生成了。
重启logstash服务,生成日志的索引:
cd /usr/local/elk/logstash/bin
./logstash -f /usr/local/elk/logstash/conf.d/nginx.conf #对应的文件也要进行加载
复制
通过浏览器访问
http://ip:9200/_cat/indices?v 出现
可以看到,nginx-test索引已经生成了,那么这时就可以到kibana上配置该索引:
配置完成之后就可以在 “Discover” 里进行查看nginx的访问日志数据了:
使用beats采集日志
之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beats轻量,所以官方也推荐使用beats来作为日志采集工具。而且beats可扩展,支持自定义构建。
官方介绍:
https://www.elastic.co/cn/products/beats
在 主节点 上安装filebeat,filebeat是beats体系中用于收集日志信息的工具:
安装方法一样 官网下载/服务器下载
服务器下载
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-linux-x86_64.tar.gz
tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz
复制
安装完成之后编辑配置文件:
vim /etc/filebeat/filebeat.yml
- type: log
# Change to true to enable this prospector configuration.
#enabled: false
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /tmp/elk_access.log
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["ip:9200"] # 并配置es服务器的ip地址
复制
修改完成后就可以启动filebeat服务了:
cd /usr/local/elk/filebeat
./filebeat
复制
启动成功后,到es服务器上查看索引,可以看到新增了一个以filebeat-6.0.0开头的索引,这就代表filesbeat和es能够正常通信了:
es服务器能够正常获取到索引后,就可以到kibana上配置这个索引了:
以上这就是如何使用filebeat进行日志的数据收集,可以看到配置起来比logstash要简单,而且占用资源还少。