环境的困境(原因)
1、开发人员不能登录线上服务器查看相信日志;
2、各个系统都有日志,日志数据分散难以查找;
3、日志数据量大,查询速度慢,或者数据不够及时。(状态码 400 的 top10)
收集->存储->统计->报警、、、
Elastic Search + Logstash +Kibana = ELK Stack
1、分布式全文搜索引擎、存储
2、日志收集(日志收集于某一处)
3、日志展示
安装过程:
一、Elastic Search
(1)、Import the Elasticsearch PGP Key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
(2)、Installing from the RPM repository
echo "[elasticsearch-5.x] name=Elasticsearch repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md" >>/etc/yum.repos.d/elasticsearch.repo yum install -y elasticsearch
修改配置文件
创建 数据目录
mkdir -p /data/es-data
vim /etc/elasticsearch/elasticsearch.yml cluster.name: Mint node.name: Mint-node1 path.data: /data/es-data path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 0.0.0.0 http.port: 9200
ES集群
cluster.name: Mint 相同就行,同一个局域网 先会广播
修改node.name
cluster.name: Mint
node.name: Mint-node2
path.data: /data/es-data
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
插件
head bigdesk kopf 暂时都不支持es5.4
#bootstrap.memory_lock: true 去掉注释会报错
解决方式:修改limit 文件 yum 安装的es,默认使用的是普通用户,需要配置limit.conf
vim /etc/security/limits.conf # allow user ‘elasticsearch‘ mlockall elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited
修改数据路径的权限
chown -R elasticsearch:elasticsearch /data/es-data systemctl enable elasticsearch systemctl start elasticsearch
Installing Logstash
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch cat > /etc/yum.repos.d/logstash.repo <<EOF [logstash-5.x] name=Elastic repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF yum install -y logstash
/usr/share/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{}}‘
/usr/share/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{ codec => rubydebug} }‘
/usr/share/logstash/bin/logstash -e ‘input { stdin{} } output { elasticsearch { hosts => "192.168.1.87:9200" protocol => "http"} }‘
/usr/share/logstash/bin/logstash -e ‘input { stdin{} } output { elasticsearch { hosts => "192.168.1.87:9200" } stdout { codec => rubydebug} }‘ //同时两个输出 一个es 一个标准输出
vim /etc/logstash/conf.d/01-logstach.conf input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } stdout { codec => rubydebug } } /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstach.conf
各种插件
https://www.elastic.co/guide/en/logstash/current/index.html
Install Kibana with RPM
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/kibana.repo
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
yum install kibana -y
修改配置文件
vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.87:9200"
kibana.index: ".kibana"
nginx Module ngx_http_log_module http://nginx.org/en/docs/http/ngx_http_log_module.html
input { file { path => "/var/log/nginx/access_json.log" codec => "json" } } output { stdout { codec => "rubydebug" } }
rsyslog 修改系统日志
修改
vim /etc/rsyslog.conf *.* @@192.168.1.87:514
nc 192.168.1.87 12345 < /etc/passwd
echo “Mint” > /dev/tcp/192.168.1.87/12345 也可以给12345 tcp端口发信息 伪设备
nc 追加文件
logstash 解耦 当需要单独修改logstash时,收集的日志可以暂存于内存中,不至于需要停止收集日志
logstash ---------->redis ---------->logstash -------->elasticsearch----------->kibana
收集 消息队列 分析 存储 显示
192.168.1.87 192.168.1.87 192.168.1.88 192.168.1.87 192.168.1.87
redis ---->rabbitmq------>kafka 一般redis就可以,不能满足的时候
解耦部分的配置文件,于明天整理发出来。再加前面的all.conf,共三个conf文件,shipper.conf、indexer.conf
logstash 写入kibana的时间戳是UTC。
http://192.168.1.87:5601/status 查看kibana状态
ab -n10000 -c1 http://192.168.1.87/ -n次数 -c 每次并发
安全解决方案 :search Guard
生产如何上线ELK
1、日志分类
系统日志 rsyslog logstash syslog插件
访问日志 nginx logstash codec json
错误日志 file logstash file + mulitline
运行日志 file logstash json
设备日志 syslog logstash syslog插件
debug日志 file logstash json or mulitline
2、日志标准化
1.路径 固定
2.格式 尽量json
系统日志开始->错误日志->运行日志->访问日志