⼀、前⾔
⽇志主要包括系统⽇志和应⽤程序⽇志,运维和开发⼈员可以通过⽇志了解服务器中软硬件的信息,检查应⽤程序或系统的故障,了解故障出现的原因,以便解决问题。分析⽇志可以更清楚的了解服务器的状态和系统安全状况,从⽽可以维护服务器稳定运⾏。
但是⽇志通常都是存储在各⾃的服务器中。如果管理数⼗台服务器, 查阅⽇志需要依次登陆不同的服务器,查看过程就会很繁琐从⽽导致⼯作效率低下。虽然可以使⽤ rsyslog服务将⽇志汇总。但是统计⼀些⽇志中的数据或者检索也是很⿇烦的,⼀般使⽤grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨⼤的⽇志进⾏统计检索,⼈⼯的效率还是⼗分低下。
通过我们对⽇志进⾏收集、汇总到⼀起,完整的⽇志数据具有⾮常重要的作⽤:
1. 信息查找。通过检索⽇志信息,查找相应的报错,可以快速的解决BUG。
2. 数据分析。如果是截断整理格式化后的⽇志信息,可以进⼀步对⽇志进⾏数据分析和统计,可以选出头条,热点,或者爆款。3. 系统维护。对⽇志信息分析可以了解服务器的负荷和运⾏状态。可以针对性的对服务器进⾏优化。
⼆、ELK简介
ELK实时⽇志收集分析系统可以完美的解决以上问题。ELK作为⼀款开源软件可以免费使⽤,也有强⼤的团队和社区对它实时更新。 ELK主要由ElasticSearch、Logstash和Kibana三个开源⼯具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
Elasticsearch :分布式搜索引擎。具有⾼可伸缩、⾼可靠、易管理等特点。可以⽤于全⽂检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是⽤Java 基于Lucene 开发,现在使⽤最⼴的开源搜索引擎之⼀,Wikipedia 、StackOverflow、Github 等都基于它来构建⾃⼰的搜索引擎。在elasticsearch中,所有节点的数据是均等的。
Logstash :数据收集处理引擎。⽀持动态的从各种数据源搜集数据,并对数据进⾏过滤、分析、丰富、统⼀格式等操作,然后存储以供后续使⽤。Kibana :可视化化平台。它能够搜索、展⽰存储在 Elasticsearch 中索引数据。使⽤它可以很⽅便的⽤图表、表格、地图展⽰和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占⽤的系统资源来说,Filebeat 所占⽤的系统资源⼏乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第⼀选择。
版本说明:
Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部⼀致,不然会出现kibana⽆法显⽰web页⾯。ELK⼯作演⽰图:
1. Filebeat在APP Server端收集⽇志
2. Logstash处理过滤Filebeat收集过来的⽇志
3. Elasticsearch存储Logstash提供的处理之后的⽇志,⽤以检索、统计4. Kibana提供web页⾯,将Elasticsearch的数据可视化的展⽰出来
三、ELK安装部署
1 . ⾸先配置JDK环境
#⾃⾏下载jdk
rpm -ivh jdk-8u144-linux-x.rpm #或者 yum install java-1.8.0-openjdk* vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_ export PATH=$JAVA_HOME/jre/bin:$PATH
source /etc/profile.d/java.sh
2 . 配置ELK yum源
vim /etc/yum.repo.d/ELK.repo[ELK]
name=ELK-Elasticstack
baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-6.x/gpgcheck=0enabled=1
#关闭selinuxsetenforce 0
sed -i.bak 's@^SELINUX=\\(.*\\)@SELINUX=disabled@p' /etc/selinux/config#关闭防⽕墙#Centos7
systemctl disable firewalldsystemctl stop firewalld#CentOS6
service iptables stopservice iptables disable
3 . 部署elasticsearch
1. 安装elasticsearch
yum install elasticsearsh# 修改系统配置⽂件属性
# vim /etc/security/limits.conf
elasticsearch soft memlock unlimitedelasticsearch hard memlock unlimitedelasticsearch soft nofile 65536elasticsearch hard nofile 131072
2. 修改配置⽂件
# vim /etc/elasticsearch/elasticsearch.yml#集群名称
cluster.name: els#节点名称
node.name: els-1#数据存放路径
path.data: /data/els_data#⽇志存放路径
path.logs: /data/log/els
#锁定jvm.options指定的内存,不交换swap内存bootstrap.memory_lock: true#绑定IP地址
network.host: 172.16.1.49#端⼝号
http.port: 9200
#配置集群配置,填写集群节点,会⾃动发现节点
# discovery.zen.ping.unicast.hosts: [\"host1\# 集群配置 只需要修改节点名,和绑定ip地址即可# vim /etc/elasticsearch/jvm.options
-Xms1g #指定占⽤内存⼤⼩,两个数字要⼀致 都是1g-Xmx1g
3. 创建数据⽬录
#创建elasticsearch数据库⽬录,并且修改属主为elasticsearch·mkdir /data/els_datamkdir /data/log/els
chown -R elasticsearch.elasticsearch /data/els_datachown -R elasticsearch.elasticsearch /data/log/els
4. 启动elasticsearch
systemctl start elasticsearch# 启动后⾃动关闭#报错
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked#将配置⽂件中的 bootstrap.memory_lock: true 注释掉,不使⽤;即可启动成功
报错启动成功后
访问172.16.1.49:9200
Elasticsearch API
集群状态:http:// 172.16.1.100:9200/_cluster/health?pretty节点状态:http:// 172.16.1.100:9200/_nodes/process?pretty分⽚状态:http:// 172.16.1.100:9200/_cat/shards
索引分⽚存储信息:http:// 172.16.1.100:9200/index/_shard_stores?pretty索引状态:http:// 172.16.1.100:9200/index/_stats?pretty索引元数据:http:// 172.16.1.100:9200/index?pretty
4. 部署Kibana
Kibana是node.js 编写的,不需要java环境。直接安装即可
1. 安装Kibana
yum install kibana
# 版本号需要和Elasticsearch 相同
2. 配置Kibana
vim /etc/kibana/kibana.ymlserver.port: 5601
server.host: \"172.16.1.50\"
elasticsearch.url: \"http://172.16.1.49:9200\"kibana.index: \".kibana\"
logging.dest: /data/log/kibana/kibana.log # 配置kibana⽇志输出到哪⾥# 创建⽇志⽬录⽂件
mkdir -p /data/log/kibana/
touch /data/log/kibana/kibana.log
chmod o+rw /data/log/kibana/kibana.log
访问172.16.1.50:5601
出现 Kibana server is not ready yet说明kibana与Elasticsearch版本号不⼀致
# 查看版本号
rpm -qa elasticsearch kibana
如果版本号⼀模⼀样,那就多刷新⼏次页⾯吧。。。。启动成功后,访问页⾯可以看到:
5. 部署Logstash
配置与Elasticsearch相同的Java环境,版本为8以上的Java环境。
1. 安装Logstash
yum install logstash-\"Version\"
2. 修改配置⽂件
http.host: \"172.16.1.229\"http.port: 9600-9700
3. 配置收集nginx⽇志配置⽂件
1. 修改nginx的⽇志格式
log_format main '{\"@timestamp\":\"$time_iso8601\'\"host\":\"$server_addr\'\"clientip\":\"$remote_addr\'\"request\":\"$request\
'\"size\":$body_bytes_sent,'
'\"responsetime\":$request_time,'
'\"upstreamtime\":\"$upstream_response_time\'\"upstreamhost\":\"$upstream_addr\'\"http_host\":\"$host\'\"url\":\"$uri\
'\"referer\":\"$http_referer\'\"agent\":\"$http_user_agent\'\"status\":\"$status\
access_log /var/log/nginx/access_test.log main;
2. 配置Lostash收集⽇志配置⽂件
input { file {
type =>\"nginx-log\"
path => [\"/var/log/nginx/access.log\"] start_position => \"beginning\" sincedb_path => \"/dev/null\" }}
output {
elasticsearch {
hosts => [\"172.16.1.49:9200\"]
index => \"nginx-log-%{+YYYY.MM}\" }}
4. 测试配置⽂件可⽤性
cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit
OpenJDK -Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=NSending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2019-02-20T17:34:29,949][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specifiedConfiguration OK # 配置⽂件OK 可以使⽤
[2019-02-20T17:34:39,048][INFO ][logstash.runner ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
WARN报错不影响运⾏直接使⽤命令
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf
就可以直接运⾏logstash
6. 部署filebeat
Logstash的数据都是从Beats中获取,Logstash已经不需要⾃⼰去数据源中获取数据了。
以前我们使⽤的⽇志采集⼯具是logstash,但是logstash占⽤的资源⽐较⼤,没有beats轻量,所以官⽅也推荐使⽤beats来作为⽇志采集⼯具。⽽且beats可扩展,⽀持⾃定义构建。
yum install filebeat-6.6.0
1. 修改filebeat配置⽂件
vim /etc/filebeat/filebeat.yml
- type: log paths:
- /Log_File #/var/log/messages
#output.elasticsearch: #注释掉输出到elasticsearch的配置 # hosts: [\"localhost:9200\"]
output.console: #添加输出到当前终端的配置 enable: true
2. 测试filebeat
/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml #运⾏filebeat,可以看见⽇志输出在当前终端
3. 修改配置将⽇志输出到elasticsearch中
- type: log paths:
- /Log_File #/var/log/messages
output.elasticsearch: #注释掉输出到elasticsearch的配置 hosts: [\"172.16.1.49:9200\"]
启动 filebeat systemctl start filebeat
运⾏curl '172.16.1.49:9200/_cat/indices?v' ,查看⽇志索引
4. 在Kibana中配置索引
即可查看到⽇志
5. 将⽇志输出到logstash中
#------------------- Logstash output ----------------------output.logstash: #将输出到elasticsearch的配置注释 # The Logstash hosts
hosts: [\"172.16.1.229:5044\"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications #ssl.certificate_authorities: [\"/etc/pki/root/ca.pem\"] # Certificate for SSL client authentication
#ssl.certificate: \"/etc/pki/client/cert.pem\" # Client Certificate Key
#ssl.key: \"/etc/pki/client/cert.key\"
6. 配置logstash
vim /etc/logstash/conf.d/test.confinput {
beats {
port =>5044 }}
#filter{} #过滤器,⾃定义过滤⽇志中的⼀些数据output {
stdout {
codec => rubydebug }
elasticsearch {
hosts => \"172.16.1.49:9200\"
index => \"test-log-%{+YYYY.MM.dd}\" }}
Elasticsearch上已经有了⽇志索引,在kibana上也可以查看到
yellow 表⽰没有副本节点可⽤,因为测试时没有搭建两台Elasticsearch可以⽤filebeat监控个⾃定义⽂件,⼿动插⼊数据。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务