ELK分布式日志系统

发布时间:2024年01月19日

日志管理方案

服务器数量较少时:

1.直接登录到目标服务器,捞日志查看

2.如果目标服务器宕机,通过rsyslog或shell/python等脚本实现日志收集,并集中保存到统一的日志服务器

服务器数量较多时:

使用ELK或EFK大型的日志系统,实现日志收集、日志存储、日志检索和分析

容器环境:

EFK Loki+Granfana

完整日志系统基本特征

收集: 能够采集多种来源的日志数据 传输:能够稳定的把日志数据解析过滤并传输到存储系统 存储:存储日志数据 分析:支持 UI 分析 瞥雀:能够提供错误报告,监控机制

ELK组件

ElasticSearch

是存储检索引擎,负责存储日志数据

Logstash

部署在日志收集目标主机上,作为数据收集引擎,负责动态收集日志数据,并对日志数据进行过滤、分析、丰富、统一格式化等操作,然后发给ES存储数据

kibana

是一个数据可视化Dashboard,提供图形化Web界面来浏览ES中存储的日志数据,可以用来汇总、分析和搜索重要数据。

日志数据收集可以使用filebeat组件去收集

filebeat

替代logstash采集日志数据

fluentd

替代logstash采集日志数据和过滤转换等功能,用于k8s容器环境

kafka/redis

作为MQ消息队列,实现流量削峰、缓冲

ELK Elasticsearch 集群部署

(在Node1、Node2、Node3节点上操作)

1.环境准备

#设置Java环境
?
java -version           #如果没有安装,yum -y install java

2.部署 Elasticsearch 软件

安装elasticsearch—rpm包

上传elasticsearch-6.7.2.rpm到/opt目录下

cd /opt
rpm -ivh elasticsearch-6.7.2.rpm
修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak


vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2,node3节点为node3
node.name: node1
node.master: true       #是否master节点,false为否
node.data: true         #是否数据节点,false为否
--33--取消注释,指定数据存放路径
path.data: /var/lib/elasticsearch
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch
--43--取消注释,避免es使用swap交换分区
bootstrap.memory_lock: true
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200                 #指定es集群提供外部访问的接口
transport.tcp.port: 9300        #指定es集群内部通信接口
--68--取消注释,集群发现通过单播实现,指定要发现的节点
discovery.zen.ping.unicast.hosts: ["192.168.116.16:9300", "192.168.116.17:9300","192.168.116.18:9300"]
?
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
es 性能调优参数
?
#优化最大内存大小和最大文件描述符的数量
vim /etc/security/limits.conf
......
*  soft ?  nofile ? ? ? ?  65536
*  hard ?  nofile ? ? ? ?  65536
*  soft ?  nproc ? ? ? ? ? 32000
*  hard ?  nproc ? ? ? ? ? 32000
*  soft ?  memlock ? ? ? ? unlimited
*  hard ?  memlock ? ? ? ? unlimited
?
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
?
需重启生效
优化elasticsearch用户拥有的内存权限
1.当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给操作系统,供lucene使用
2.当机器内存大于64G时,遵循原则:建议分配给ES分配 4~32G 的内存即可,其它内存留给操作系统,供lucene使用
?
vim /etc/sysctl.conf
#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144
?
sysctl -p
sysctl -a | grep vm.max_map_count
启动elasticsearch是否成功开启
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200

查看节点信息
浏览器访问  http://192.168.116.16:9200  、 http://192.168.116.17:9200 查看节点 Node1、Node2 的信息。
?
浏览器访问 http://192.168.116.16:9200/_cluster/health?pretty  、 http://192.168.116.17:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
?
浏览器访问 http://192.168.116.16:9200/_cluster/state?pretty  检查群集状态信息。
?
使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
?

3.安装 Elasticsearch-head 插件

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
1)编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
?
cd /opt
tar zxvf node-v8.2.1.tar.gz
?
cd node-v8.2.1/
./configure
make -j 4&& make install
2)安装 phantomjs
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
(3)安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head-master.zip 到/opt
cd /opt
unzip elasticsearch-head-master.zip
cd /opt/elasticsearch-head/
npm install      //安装依赖包
(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true             #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"         #指定跨域访问允许的域名地址为所有
?
systemctl restart elasticsearch
5)启动 elasticsearch-head 服务
#必须在解压后的/opt/elasticsearch-head-master 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /opt/elasticsearch-head-master
npm run start &
?
?
#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100
 
6)通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.116.16:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
 
(7)插入索引
#通过命令插入一个测试索引,索引为 index-demo,类型为 test。
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

?

浏览器访问 http://192.168.116.16:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。

ElaslicSearch索引管理

创建索引

curl -X PUT或者POST http://IP:9200/<索引名>[/<类型>/<文档ID>?prelly&prelly] [-H 'content-Type: application/json' -d '{"键名1":"键值","键名2":"键值"}'(指定内容格式为json格式)]

删除索引

curl -X DELETE http://IP:9200/<索引名>[<索引名2>,……]

查看索引配置

curl -X GET http://IP:9200/<索引名>/_settings 

修改索引配置

curl -X PUT http://IP:9200/<索引名>/_settings \
-H 'content-Type: application/json' -d ["键名":"键值”]'

创建索引别名

curl -X POST http://Ip:9200/ aliases \
-H 'content-Type: application/json' -d '{"actions":[{"add":("index":"索引名","alias":"索引别名"}}]}'

删除索引别名

curl -X PoST http://Ip:9200/ aliases \
-H 'content-Type: application/json' -d '{"actions":[{"remove":{"index":"索引名","alias":"索引别名"}}]}'

ELK Logstash 部署

(在 nginx 节点上操作)

1.更改主机名,关闭防火墙
hostnamectl set-hostname nginx
?
systemctl stop firewalld.service
setenforce 0
2.下载nginx,上传repo包,或者编译安装,开启nginx服务
3.设置nginx页面
cd /usr/share/nginx/html/
echo '<h1>wx like dsb!</h1>' > wxdsb.html
4.安装logstash
#上传软件包 logstash-6.7.2.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-6.7.2.rpm ? ? ? ? ? ? ? ? ? ? ? ? ?
systemctl start logstash.service
systemctl enable logstash.service
?
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

5.定义 logstash配置文件
#格式如下:
input {...}
filter {...}
output {...}


mkdir /etc/logstash/sincedb_path/
?
cd /etc/logstash/sincedb_path/
touch log_progress
chown logstash. log_progress
cd ..
cd conf.d/
systemctl stop logstash.service
vim syslog.conf
?
input {
 ?  file{
 ? ? ?  path =>"/var/log/messages"
 ? ? ?  type =>"syslog"
 ? ? ?  start_position =>"beginning"
 ? ? ?  sincedb_path => "/etc/logstash/sincedb_path/log_progress"
 ? ? ?  add_field => {"log_hostname"=>"${HOSTNAME}"}
 ?  }
}
?
?
#filter {}
?
?
output {
  elasticsearch {
 ? ?  hosts => ["192.168.116.116.16:9200"]
 ? ?  index => "syslog-%{+yyyy.MM.dd}"
  }
}
?
?
logstash -f system.conf

ELK Kiabana 部署

1.在node1安装 Kiabana

#上传软件包 kibana-6.7.2-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-6.7.2-x86_64.rpm

2.设置 Kibana 的主配置文件

vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,配置es服务器的ip,如果是集群则配置该集群中master节点的ip
elasticsearch.url:  ["http://192.168.80.10:9200","http://192.168.116.16:9200"] 
--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
--96--取消注释,配置kibana的日志文件路径(需手动创建),不然默认是messages里记录日志
logging.dest: /var/log/kibana.log
--113--取消注释,把中文模式打开
i18n.locale: "zh-CN"

3.创建日志文件,启动 Kibana 服务

cd /var/log
touch /var/log/kibana.log
chown kibana. kibana.log
?
systemctl start kibana.service
systemctl enable kibana.service
?
netstat -natp | grep 5601

4.验证

浏览器访问 http://192.168.116.16:5601
?
可视化界面,可以通过kibana直接管理操作

?

文章来源:https://blog.csdn.net/HanYuHao11/article/details/135687368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。