考虑到nginx日志文件太大,分割太麻烦,为了方便分析服务器性能,所以有了此文章。
安装elastic
新建文件夹
mkdir -p /usr/local/elk
下载elastic
cd /usr/local/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz
tar xvf elasticsearch-7.6.0-linux-x86_64.tar.gz
启动elastic
cd /usr/local/elk/elasticsearch-7.6.0/bin
./elasticsearch -d
异常情况:
java.lang.RuntimeException: can not run elasticsearch as root
这种就是不能用root解决方式
创建elastic用户
adduser elastic
设置密码
passwd elastic
修改目录权限
chown -R elstic /etc/usr/elk
切换用户
su elastic
然后可以用curl 127.0.0.1:9200 测试,如果返回json串就是成功了。
本地可以安装一个elastic head可视化查询elastic数据,https://github.com/mobz/elasticsearch-head
npm run start 启动,本地访问9100端口,然后连接服务器地址:9200就可以了
如果外部访问不了这么排查:
1.先curl看能不能访问,如果没有拒绝那就是端口没打开
2.然后就排查端口是否开放,安全组件放了端口后,服务器的防火墙也要把端口打开
3.elastic 配置改一下 外网可以访问host:0.0.0.0
打开端口命令:/sbin/iptables -I INPUT -p tcp --dport 9200 -j ACCEPT
查看端口是否开放:/sbin/iptables -L -n
如果出现下面异常:
the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
添加配置:
cluster.name: my-application
node.name: node-1
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]==================================================================
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
/etc/sysctl.conf
vm.max_map_count=262144
/sbin/sysctl -p 立即生效==================================================================
elasticsearch-head 集群健康值: 未连接
elasticsearch.yml 配置文件加上
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
安装filebeats
cd /usr/local/elk/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.0-linux-x86_64.tar.gz
tar xvf filebeat-7.6.0-linux-x86_64.tar.gz
./filebeat modules list
./filebeat modules enable nginx
查询modules列表打开nginx
./filebeat modules disable nginx 关掉modules
修改modules.d里面的nginx文件 配置access.log和error.log
然后把外面配置文件里面的输入删除 设置modules
nohup ./filebeat -e -c filebeat.yml > filebeat.log &
后台启动
Exiting: Error while initializing input: required 'object', but found 'string' in field 'filebeat.inputs.0.fields' (source:'filebeat.yml')
一般配置有问题,用排除法修改配置测试
./filebeat -c filebeat.nginx.yml setup
安装大盘表
Exiting: resource 'filebeat-7.9.3' exists, but it is not an alias
会提示这个资源已经存在,但是没有别名,因此,需要删除原本创建的filebeat索引,再重新执行上述命令让其自动创建索引即可正常地进行仪表盘安装。删除掉后需要日志改变才会去激活,nginx 502 都会有日志
安装kibana
cd /usr/local/elk/logstash-7.6.0/config
cp logstash-sample.conf logstash.conf
vim logstash.conf
配置日志输入,beats配置
input {
beats {
# beats的端口号
port => 5044
# 是否开启ssl加密,否
ssl => false
}
}./kibana & 后台启动