(这一篇博文只是记录一下自己实践的过程,过多原理不多解释,做这个实验大部分原因是练习,博主玻璃心,不喜勿喷,哪里有错可以讨论,谢谢)
##一些配置文件和sls都在github上,https://github.com/HalQQ/elk_redis
架构图
Saltstack:
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
ELK=elasticsearch+Logstash+Kibana
Elasticsearch:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash:LogstashLogstash 是一个接收,处理,转发日志的工具。支持系统日志,webserver 日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型
Kibana: Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。
Redis
Redis: Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区
环境:
系统 | IP地址 | 主机名 | 安装的软件 |
Centos 7 | 192.168.253.144 | Linux-node1 | Es,Logstash,Apache,Salt-minion |
Centos 7 | 192.168.253.145 | Linux-node2 | Es,Logstash,Redis,Salt-minion |
Centos 7 | 192.168.253.146 | Linux-node3 | Es,Logstash,Apache,Salt-master, Salt-minion, |
1.安装saltstack
这里采用最简单的yum安装,版本为2018.3.0
三台机都先安装salt-minion
yum install https://repo.saltstack.com/yum/redhat/salt-repo-2018.3-1.el7.noarch.rpm -y
yum clean expire-cache
yum install salt-minion -y
然后在node3上安装salt-master
yum install salt-master -y
在三台机上修改配置文件
vim /etc/salt/minion
master: 192.168.253.146 ##将ip修改为master的ip地址
在salt-master上修改配置文件
vim /etc/salt/master
file_roots: ###打开file_root 放sls文件
base:
- /srv/salt
在master上创建相关目录
mkdir /srv/salt/files -p
在node3上启动salt-master
systemctl start salt-master
三台机启动salt-minion,并关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
systemctl start salt-minion
然后再node3上接收minion的公钥
测试一下,在salt-master即node3 端执行命令
表示成功。
到此为止,saltstack安装安装完毕。接下来写state.sls文件
先展示一下目录机构
一个一个文件来看吧
搭建es集群的sls文件
[root@Linux-node3 salt]# cat es.sls
es-install:
pkg.installed:
- pkgs:
- java
- unless: java -version
file.managed:
- name: /etc/yum.repos.d/elasticsearch.repo
- source: salt://files/elasticsearch.repo
- mode: 644
- user: root
- group: root
cmd.run:
- name: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch&&yum install elasticsearch -y
- require:
- file: /etc/yum.repos.d/elasticsearch.repo
- unless: test -d /usr/share/elasticsearch
es-init:
file.managed:
- name: /etc/elasticsearch/elasticsearch.yml
- source: salt://files/elasticsearch.yml
- mode: 644
- user: root
- group: root
- template: jinja
- NODE_NAME: {{ grains['ipv4'][1] }}
- IP1: 192.168.253.144
- IP2: 192.168.253.145
- IP3: 192.168.253.146
- require:
- cmd: es-install
service.running:
- enable: True
- name: elasticsearch
- watch:
- file: /etc/elasticsearch/elasticsearch.yml
搭建apache服务的sls文件
[root@Linux-node3 salt]# cat httpd.sls
http-install:
pkg.installed:
- pkgs:
- httpd
- unless: test -d /etc/httpd
http-init:
service.running:
- enable: True
- name: httpd
搭建kibana的sls文件
[root@Linux-node3 salt]# cat httpd.sls
http-install:
pkg.installed:
- pkgs:
- httpd
- unless: test -d /etc/httpd
http-init:
service.running:
- enable: True
- name: httpd
[root@Linux-node3 salt]# cat kibana.sls
kibana-install:
pkg.installed:
- pkgs:
- java
- unless: java -version
file.managed:
- name: /etc/yum.repos.d/kibana.repo
- source: salt://files/kibana.repo
- mode: 644
- user: root
- group: root
cmd.run:
- name: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch && yum install kibana -y
- require:
- file: /etc/yum.repos.d/kibana.repo
- unless: test -d /usr/share/kibana
kibana的初始化
[root@Linux-node3 salt]# cat kibana-init.sls
/etc/kibana/kibana.yml:
file.managed:
- source: salt://files/kibana.yml
- mode: 644
- user: root
- group: root
/etc/profile:
file.append:
- text:
- export "PATH=/usr/share/kibana/bin/:$PATH"
logstash搭建与初始化sls文件
[root@Linux-node3 salt]# cat logstash.sls
logstash-install:
pkg.installed:
- pkgs:
- java
- unless: java -version
file.managed:
- name: /etc/yum.repos.d/logstash.repo
- source: salt://files/logstash.repo
- mode: 644
- user: root
- group: root
cmd.run:
- name: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch&& yum install logstash -y
- require:
- file: /etc/yum.repos.d/logstash.repo
- unless: test -d /usr/share/logstash
logstash-init:
file.append:
- name: /etc/profile
- text:
- export PATH="/usr/share/logstash/bin/:$PATH"
发送相关文件的sls
[root@Linux-node3 salt]# cat logstash-apachelog.sls
/etc/logstash/conf.d/apachelog_redis.conf:
file.managed:
- source: salt://files/apachelog_redis.conf
- mode: 644
- user: root
- group: root
- unless: test -f /etc/logstash/conf.d/apachelog_redis.conf
[root@Linux-node3 salt]# cat logstash_redis_es.sls
/etc/logstash/conf.d/redis_es.conf:
file.managed:
- source: salt://files/redis_es.conf
- mode: 644
- user: root
- group: root
- unless: test -f /etc/logstash/conf.d/redis_es.conf
安装redis的sls文件
[root@Linux-node3 salt]# cat redis.sls
redis-install:
file.managed:
- name: /usr/local/src/redis-4.0.9.tar.gz
- source: salt://files/redis-4.0.9.tar.gz
- mode: 755
- user: root
- group: root
- unless: test -d /usr/local/redis-4.0.9.tar.gz
cmd.run:
- name: cd /usr/local/src/&&tar -xzf redis-4.0.9.tar.gz&& cd redis-4.0.9&& make
- unless: test -d /usr/local/src/redis-4.0.9
redis-init:
file.managed:
- name: /usr/local/src/redis-4.0.9/redis.conf
- source: salt://files/redis.conf
- mode: 644
- user: root
- group: root
系统初始化文件
[root@Linux-node3 salt]# cat system-init.sls
system-init:
pkg.installed:
- names:
- gcc
- gcc-c++
- net-tools
top.sls
[root@Linux-node3 salt]# cat top.sls
base:
'*':
- es
- system-init
- httpd
- logstash
'192.168.253.146':
- kibana
- kibana-init
'192.168.253.145':
- redis
- logstash_redis_es
'192.168.253.14[4,6]':
- logstash-apachelog
其余一些配置文件都在github上,地址https://github.com/HalQQ/elk_redis
完成state.sls编写之后在salt-master执行
salt '*' state.highstate
在node2上启动redis
/usr/local/src/redis-4.0.9/src/redis-server --protected-mode no
在node1,node3启动logstash发送apache日志
logstash -f /etc/logstash/conf.d/apachelog_redis.conf
(##如果显示找不到logstash命令 可能因为路径没有添加,添加以下路径即可)
然后用node2查看一下
在node2上启动logstash将日志转发到es集群中
logstash -f /etc/logstash/conf.d/apachelog_redis.conf
在node1上启动kibana
(##如果显示找不到命令,则添加一下kibana路径即可,)
登陆访问 http://192.168.253.146:5601
到此为止 saltstack部署elk就基本完成了,当然了,这只是比较简单的搭建出来了,很多配置没有调。