ELK基础环境安装

首先来快速将一个简易的环境部署起来。 其中防火墙关闭,selinux关闭等的就不多说了,系统是CentOS-7.3,干净而且初始化过了的环境。

1,准备工作

  • 安装一些依赖包。
yum -y install lrzsz vim curl wget java ntpdate && ntpdate -u cn.pool.ntp.org

这里java环境是非常重要的,如果不通过yum安装,源码方式也是可以的。但要注意配置好环境变量。

  • 配置yum源。

添加源:

cat > /etc/yum.repos.d/elk.repo << EOF
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

导入key:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

如果执行这一步报错,则有可能是主机时间问题,可以同步一下主机时间,再执行!

注:一开始我想着把elk三个安装包都缓存下来,这样以后安装起来就会方便多了,于是我这么做了,但是后来发现,经过缓存的包安装的elk集群,使用的时候是一种没有授权的状态,后来想起正常安装时有这样一个导入key的操作,思来想去,大概就是跟这一步有关系了。最后还是老老实实的通过这样一个流程方式进行安装了。

2,安装elasticsearch

直接yum安装

yum -y install elasticsearch

启动服务

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service
curl localhost:9200

调整一下配置文件:

[root@elk ~]$egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application
node.name: node-1
path.data: /logs/elasticsearch6
path.logs: /logs/elasticsearch6/log
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["elk-node1"]
discovery.zen.minimum_master_nodes: 1
xpack.security.enabled: false
  • cluster.name:自定义集群名,相同集群内的节点设置相同的集群名
  • node.name:自定义节点名,建议统一采用节点hostname
  • path.data:data存储路径,这里更改成自定义以应对日志的big。
  • path.logs:log存储路径,是为es自己的日志。
  • 注意创建上边两项定义的两个文件目录。否则会启动失败。
mkdir -p /logs/elasticsearch6/log
cd /logs
chown -R elasticsearch.elasticsearch elasticsearch6/

注意要更改对应目录的权限,否则es启动会报如下错误

[root@elk logs]$systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2018-12-14 15:12:48 CST; 5min ago
     Docs: http://www.elastic.co
  Process: 79428 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=1/FAILURE)
 Main PID: 79428 (code=exited, status=1/FAILURE)
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,084 main ERROR Null object returned for RollingFile in Appenders.
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,084 main ERROR Unable to locate appender "rolling" for logger config "root"
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,084 main ERROR Unable to locate appender "index_indexing_slowlog_rolling" for logger config "index.indexing.slowlog.index"
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,084 main ERROR Unable to locate appender "audit_rolling" for logger config "org.elasticsearch.xpack.security....gAuditTrail"
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,084 main ERROR Unable to locate appender "index_search_slowlog_rolling" for logger config "index.search.slowlog"
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,084 main ERROR Unable to locate appender "deprecated_audit_rolling" for logger config "org.elasticsearch.xpac...gAuditTrail"
Dec 14 15:12:48 elk elasticsearch[79428]: 2018-12-14 15:12:48,085 main ERROR Unable to locate appender "deprecation_rolling" for logger config "org.elasticsearch.deprecation"
Dec 14 15:12:48 elk systemd[1]: elasticsearch.service: main process exited, code=exited, status=1/FAILURE
Dec 14 15:12:48 elk systemd[1]: Unit elasticsearch.service entered failed state.
Dec 14 15:12:48 elk systemd[1]: elasticsearch.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
  • network.host:es监听地址,采用"0.0.0.0",表示允许所有设备访问。
  • http.port:es监听端口,可不取消注释,默认即此端口。
  • discovery.zen.ping.unicast.hosts:集群节点发现列表,也可采用ip的形式
  • discovery.zen.minimum_master_nodes:如果暂时是单节点部署,可以设置成1
  • xpack.security.enabled:添加这条,这条是配置kibana的安全机制,暂时关闭。

重启es

systemctl restart elasticsearch.service
systemctl status elasticsearch.service

3,安装logstash

直接yum安装。

yum -y install logstash

配置logstash

[root@elk ~]$egrep -v "^#|^$" /etc/logstash/logstash.yml
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d
path.logs: /var/log/logstash

这个地方重要的是第二条配置,同许多应用类似的,这里定义了一个include的目录,以后我们的多个应用实例就可以直接放置在这个目录下了,这里作为了解,后边并不会应用配置好的logstash,原因在后边会说。

然后定义此logstash不再使用系统管理启动,而是以后通过命令行来起对应的logstash实例。 同时创建软链接,从而让系统能够在/usr/share/logstash下读取到相对应的logstash配置信息。

systemctl disable logstash.service
ln -s /etc/logstash /usr/share/logstash/config

然后logstash先放在这里,不用启动,对应的日志等操作,后边就会介绍了。

4,安装kibana

直接yum安装

yum -y install kibana

配置kibana

[root@elk ~]$egrep -v "^#|^$" /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://10.100.120.82:9200"
kibana.index: ".newkibana"
  • kibana.index:原来默认是".kibana",但是新版本的kibana启动之后发现无法访问,访问之后抛出一个异常:kibana server is not ready yet,那么回来把配置更改成".newkibana",然后重启kibana,再次访问,即可成功。

另外:配置发现,当我把上边配置写入kibana,然后启动,看状态是正常的,但是访问起来总是会报 Kibana server is not ready yet,这似乎是一个经典的错误,却又让人无从下手解决。经过我的一些测试,获得以小经验。

那就是,此处配置文件,不建议直接把原来配置内容清空,然后添加当前内容的方式,尽管在上边配置elasticsearch以及logstash的时候,都这么做了,两个应用都没有发生什么奇怪的问题,但是这在kibana这里,似乎是不可行的,于是如果已经陷入上边那个报错之中了,那么我的建议是首先把当前kibana卸载,然后重新安装,接着在原有配置文件中,比照着上边的四项配置文件进行更改即可,配置完毕之后,启动kibana,等个两三分钟之后再访问会发现,问题就神奇的消失了。

启动kibana

systemctl enable kibana.service
systemctl restart kibana
systemctl status  kibana

到这儿,基本上,作为单台的elk主机上的工作基本上已经完成,可以说非常简单,不过这才刚刚开始。

<think>好的,我现在需要回答用户关于Docker的`--link`参数的问题。用户之前已经询问过`-d`和`--name`参数的作用,现在转向`--link`,特别是在连接Logstash和Elasticsearch容器时的应用。首先,我应该回忆一下`--link`的基本功能,然后结合用户提供的引用内容来具体说明。 根据之前的引用,用户提到在运行Logstash时使用了`--link elasticsearch:elasticsearch`,这可能涉及到容器之间的通信。Docker的`--link`参数用于连接两个容器,允许它们进行通信,而无需暴露所有端口。这在早期的Docker版本中是常用的方法,但现在可能被更现代的网络方式取代,比如用户自定义网络。不过,用户的具体案例中仍在使用`--link`,所以需要解释它的作用。 首先,`--link`的基本语法是`--link <容器名称或ID>:<别名>`。例如,在引用[1]和[3]中,用户运行Logstash容器时使用了`--link elasticsearch:elasticsearch`,这表示将Elasticsearch容器链接到Logstash,并设置别名为elasticsearch。这样,在Logstash容器内部,可以通过别名elasticsearch来访问Elasticsearch服务,而无需知道其实际IP地址。 接下来,需要解释`--link`的两个主要功能:环境变量注入和/etc/hosts更新。当容器A链接到容器B时,容器A的环境变量中会包含容器B的相关信息,比如端口和协议。同时,容器A的/etc/hosts文件会被更新,添加容器B的别名及其IP地址的条目,从而实现通过主机名解析。 在用户提供的引用中,Logstash需要将日志数据传输到Elasticsearch,因此正确的网络连接至关重要。通过`--link`参数,Logstash容器可以直接使用预定义的别名(如elasticsearch)来访问Elasticsearch的API端口(如9200),而无需手动配置IP地址。这在引用[3]的命令中得到了体现,其中Logstash的配置文件可能引用了`elasticsearch`作为主机名。 然而,需要注意`--link`的使用限制和替代方案。根据Docker的文档,`--link`属于旧式容器连接方式,官方推荐使用自定义网络来实现容器间通信,因为后者提供了更好的灵活性和安全性。但在用户提供的例子中,可能由于版本兼容性或特定配置需求,仍然使用了`--link`,所以需要说明其适用场景及潜在问题。 此外,结合引用[4]和[5]中的内容,用户可能在部署Elasticsearch时进行了其他配置,如设置单例模式、调整内存参数,或安装IK分词器。这些步骤可能与容器间的连接无关,但需要确保Elasticsearch容器在启动时正确配置,以便Logstash能够成功连接。例如,Elasticsearch的默认网络设置可能需要允许来自其他容器的连接,而`--link`在此过程中简化了网络配置。 最后,应该提醒用户`--link`的替代方案,比如创建自定义网络,并说明其优势,如更好的隔离性和可扩展性。同时,给出实际的使用示例,帮助用户理解如何在命令中正确应用`--link`参数,特别是在连接Logstash和Elasticsearch时的具体步骤和注意事项。</think>### Docker `--link` 参数详解:连接容器通信的核心机制 #### 一、`--link` 的核心功能 `--link` 参数用于**建立容器间的单向通信通道**,使源容器能直接访问目标容器的网络服务,**无需暴露端口到宿主机**。在 Logstash 与 Elasticsearch 的集成场景中,其作用尤为关键[^1][^3]。 **语法格式**: ```bash docker run --link <目标容器名>:<容器内别名> ... ``` #### 二、`--link` 的工作原理 1. **环境变量注入** Docker 自动在源容器中注入目标容器的环境变量,包含: - 端口信息:如 `ELASTICSEARCH_PORT_9200_TCP=tcp://172.17.0.2:9200` - 协议类型:如 `ELASTICSEARCH_PORT_9200_TCP_PROTO=tcp` - 别名映射:如 `ELASTICSEARCH_NAME=/logstash/elasticsearch` 2. **Hosts 文件更新** 在源容器(如 Logstash)的 `/etc/hosts` 中添加目标容器(如 Elasticsearch)的 IP 与别名映射: ```text 172.17.0.2 elasticsearch ``` #### 三、Logstash 连接 Elasticsearch 的典型用法 **示例命令**(参考引用[1][3]): ```bash docker run -d --name logstash \ --link elasticsearch:elasticsearch \ # 建立通信链路 -v ./logstash.conf:/config/logstash.conf \ logstash:7.13.1 -f /config/logstash.conf ``` **配置文件关键配置**(`logstash.conf`): ```ruby output { elasticsearch { hosts => ["elasticsearch:9200"] # 直接使用别名访问 } } ``` #### 四、`--link` 的局限性及替代方案 | 特性 | `--link` 参数 | 自定义 Docker 网络 | |-------------------|---------------------------------------|-------------------------------------| | **通信方向** | 单向 | 双向 | | **灵活性** | 依赖容器启动顺序,目标容器需先运行 | 容器可动态加入/退出网络 | | **安全性** | 自动暴露所有端口 | 可通过网络策略精细化控制端口访问 | | **维护成本** | 高(需手动管理链接关系) | 低(自动服务发现) | | **推荐场景** | 旧版本兼容或简单测试环境 | 生产环境或多容器复杂架构 | **替代方案操作示例**: ```bash # 1. 创建自定义网络 docker network create elk_network # 2. 启动容器时加入同一网络 docker run -d --name elasticsearch --network elk_network elasticsearch:7.17.3 docker run -d --name logstash --network elk_network logstash:7.13.1 # 3. Logstash 配置中可直接通过容器名访问 hosts => ["elasticsearch:9200"] ``` #### 五、常见问题解答 1. **为何 `--link` 需要目标容器先启动?** 链接依赖目标容器的运行时信息(如 IP),因此需先创建目标容器[^3]。 2. **链接多个容器时如何操作?** 对每个依赖的容器单独使用 `--link`: ```bash docker run --link elasticsearch:es --link redis:cache ... ``` 3. **`--link` 与 Docker Compose 的关系** Docker Compose 自动为服务创建共享网络,无需手动使用 `--link`,直接通过服务名访问即可。 --- ### 相关问题 1. 如何验证两个容器之间是否通过 `--link` 成功建立连接? 2. Docker 自定义网络相比 `--link` 有哪些具体优势? 3. 如果使用 `--link` 时出现“无法解析主机名”错误,应如何排查?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值