写作背景
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
架构规划
1、服务器架构
普通日志整体路径:
各系统生成日志–>>filebeat推送到–>>logstash(172.17.0.179-180)筛选后添加Index–>>ES(172.17.0.181)–>>kibana(172.17.0.85 nginx代理负载均衡到172.17.0.179-180,可以只用一台,这里只做测试)
特定日志整体路径
各系统生成日志–>>filebeat推送到–>>logstash(172.17.0.179-180)筛选后推送到–>>redis(172.17.0.185)推送到–>>Logstash(172.17.0.185)–>ES(172.17.0.181)–>>kibana(172.17.0.85 nginx代理负载均衡到172.17.0.179-180,可以只用一台,这里只做测试)
2、服务器安装规划
NO. | IP | hostname | soft |
---|---|---|---|
1 | 172.17.0.179 | kibana1.sctx.uat | jdk8,logstash,kibana,nginx |
2 | 172.17.0.180 | kibana2.sctx.uat | jdk8,logstash,kibana,nginx |
3 | 172.17.0.181 | es1.sctx.uat | jdk8,elasticsearch |
4 | 172.17.0.182 | es2.sctx.uat | jdk8,elasticsearch |
5 | 172.17.0.183 | es3.sctx.uat | jdk8,elasticsearch |
6 | 172.17.0.184 | es4.sctx.uat | jdk8,elasticsearch |
7 | 172.17.0.185 | elk-redis.sctx.uat | jdk8,logstash,redis |
软件下载安装
软件下载
1、Java1.8
2、ELK(elasticsearch,logstash,kibana,filebeat)
https://www.elastic.co/downloads
3、Redis
http://download.redis.io/releases/redis-4.0.9.tar.gz
软件安装及配置
安装java1.8
1、将 prm 文件下载到本地,然后在本地安装
yum localinstall jdk-8u172-linux-x64.rpm -y
安装 elasticsearch
1、将安装包下载到本地,然后通过本地安装
yum localinstall -y elasticsearch-6.2.4.rpm
2、修改配置文件
此配置文件除node.name 和 network.host 在各服务器上不同之外,其它地方不用改变各服务器通用
主机:172.17.0.181,172.17.0.182,172.17.0.183,172.17.0.183
# 修改系统配置环境(不建议修改)
vi /etc/sysconfig/elasticsearch
# 修改软件配置
vi /etc/elasticsearch/elasticsearch.yml
# 修改第17行 ES群集名称(各服务器配置要相同)
cluster.name: ELK-Sctx-UAT
# 修改第23行 节点名称(当前节点的名称,每台服务器不能相同)
node.name: sctx1
# 修改第33行日志数据存储路径(ES收集的其它服务器,软件的日志)
# 这里一定要注意,如果不是默认目录,请一定要给目标目录加上
# elasticsearch用户,用户组的所有者权限
# 这里的作法是:默认路径不变,将目标目录做文件夹软链接。
path.data: /var/lib/elasticsearch
# 修改第37行日志路径(这里是ES自身产生的日志),不建议修改,可以参照上面的方法。
path.logs: /data/logs/elasticsearch
# 修改第55行,本机IP
network.host: 172.17.0.181
# 修改第59行,程序运行端口(如果有必要就修改一下,另外注意防火墙是否开启相应端口)
http.port: 9200
# 修改第69行,添加群集内各主机的IP,或者域名,使ES主机自动组成群集。
discovery.zen.ping.unicast.hosts: ["172.17.0.181","172.17.0.182","172.17.0.183","172.17.0.183"]
# 其它设置暂时保持默认。
3、根据配置文件修改几个路径(默认在根路径下,一般情况下根路径硬盘空间都比较小,所以修改一下)。
mkdir -p /data/logs/elasticsearch
rm -rf /var/lib/elasticsearch/
ln -s /data/lib/elasticsearch /var/lib/elasticsearch
chown -R elasticsearch:elasticsearch /data/logs/elasticsearch
chown -R elasticsearch:elasticsearch /data/lib/elasticsearch
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
ll /var/lib/ /data/lib/ /data/logs/
保存,退出
4、启动服务并加入自动启动
systemctl start elasticsearch
systemctl enable elasticsearch
5、查看启动状态
systemctl status elasticsearch -l
6、查看启动端口
ss -tnl
安装并配置 Logstash
1、将安装包下载到本地,然后通过本地安装
yum localinstall -y logstash-6.2.4.rpm
2、修改配置文件
这个Logstash用来接收Filebeat传输过来的日志,然后分类推送到ES或者Redis。
主机:172.17.0.179,172.17.0.180
# 修改系统环境路径,日志路径(不建议修改,如果有修改,请注意目录权限)
vi /etc/logstash/startup.options
# 修改公共软件配置(不建议修改)
vi /etc/logstash/logstash.yml
# 新建 lostash 运行配置文件(这个是自定义的)
# 要在/etc/logstash/conf.d/ 下建立 *.conf文件
vi /etc/logstash/conf.d/logstash.conf
具体配置如下:
# FileName:logstash.conf
# FilePath: /etc/logstash/conf.d
# Author: Longger
# Data:2018-05-16
# Logs Source
# 日志来源 这里是来自filebeat,要在filebeat的输出中指向logstash服务器的IP
input {
beats {
port => 5044
}
}
# logs filter,include date,tag..
# 日志筛选器,过滤出日志生成时间,移除多余Tags,添加指定Tags,
# 替换 @timestamp
filter {
# logdate
grok {
match => ["message","(?<logdate>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}\s+%{TIME})"]
remove_tag => "beats_input_codec_plain_applied"
remove_tag => "_dateparsefailure"
}
grok {
match => ["message","analyze_result"]
add_tag => ["analyze"]
remove_tag => "_grokparsefailure"
}
# change @timestamp from logdate (the logs date)
if "spider" in [tags] {
date {
match => ["logdate","yyyy-MM-dd HH:mm:ss:SSS"]
target => "@timestamp"
remove_field => "logdate"
}
}
else {
date {
match => ["logdate","yyyy-MM-dd HH:mm:ss.SSS"]
target => "@timestamp"
remove_field => "logdate"
}
}
}
# Logs Output
# 日志输出,根据指定条件输出不同的Index,或不同的服务器。
# 比如这里可以输出到ES,也可以输出到Redis
# 这里使用的判断条件是Tags,Tags是在Filebeat输出时添加的,
# 也可以在上面的Filter中添加。
# 输出的 ES 直接指向群集中的一台,系统会自动负载均衡。
output {
stdout {codec => rubydebug}
if "openapi" in [tags] {
elasticsearch {
hosts => "172.17.0.181:9200"
manage_template => true
index => "openapi-%{+yyyy.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
else if "spider" in [tags] {
elasticsearch {
hosts => "172.17.0.181:9200"
manage_template => true
index => "spider-%{+yyyy.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
else if "proxy" in [tags] {
elasticsearch {
hosts => "172.17.0.181:9200"
manage_template => true
index => "proxy-%{+yyyy.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
# 这个是我要单独筛选出来,用于做出图表的数据,输出到Redis
else if "analyze" in [tags] {
redis {
host => "172.17.0.185"
port => "6379"
data_type => "list"
key => "logstash:analyze"
}
}
else {
elasticsearch {
hosts => "172.17.0.181:9200"
manage_template => true
index => "%{[@metadata][beat]}-%{+yyyy.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
}
3、修改配置文件
这个Logstash用来接收Redis传输过来的日志,然后添加Index推送到ES。
主机:172.17.0.185
input {
redis {
host => "172.17.0.185"
port => "6379"
data_typy => "list"
key => "logstash:analyze_result"
}
}
output {
elasticsearch {
hosts => "10.10.5.152:9200"
manage_template => true
index => "analyze-%{yyyy.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
4、启动服务并加入自动启动
systemctl start logstash
systemctl enable logstash
5、查看启动状态
systemctl status logstash -l
6、查看启动端口
ss -tnl
安装配置Redis
1、将安装包下载到本地,然后解压安装。
tar -xzvf redis-4.0.9.tar.gz
# 进入目录
cd redis-4.0.9
# make 编译安装
# 安装编译环境
yum install gcc-c++ tcl -y
# make && make install
make MALLOC=libc
make install
# 通过脚本安装为系统服务
cd ./utils/
./install_server.sh
2、修改配置
vi /etc/redis/6379.conf
# 修改70行,bind 127.0.0.1 ,否则其它地方不能访问。
bind 0.0.0.0
3、启动服务
systemctl start redis_6379
systemctl enable redis_6379
systemctl status redis_6379 -l
4、查看端口
ss -tnl
![查看端口]](CentOS7%E4%B8%8BELK%E5%AE%89%E8%A3%85%E8%B0%83%E8%AF%95/elk-red3.png)
安装kibana
1、将安装包下载到本地,然后通过本地安装
yum localinstall -y kibana-6.2.4-x86_64.rpm
安装 nginx 做反向代理并使用密码
yum install nginx httpd-tools
2、修改配置文件
vim /etc/kibana/kibana.yml
# 修改第2行,指定端口,不修改会默认5601
server.port: 5601
# 修改第7行为本机IP
server.host: "172.17.0.180"
# 修改第21行,ES主机集群的地址(指定期中一台就可以了)
elasticsearch.url: "http://172.17.0.181:9200"
# 其它地方暂时不用修改,待后续研究。
3、启用nginx代理
server {
listen 80;
server_name kibana;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/kibana-user;
location / {
proxy_pass http://172.17.0.180:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
4、生成登录用户
htpasswd -cm /etc/nginx/kibana-user admin
5、启动服务
systemctl start kibana
systemctl enable kibana
systemctl status kibana -l
systemctl start nginx
systemctl enable nginx
systemctl status nginx -l
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin