プロキシ環境下での Datadog インストール（Squid版）

## :bookmark: 説明
インターネットに直接接続できない、プロキシ越しでしか外部にアクセスできない環境下での Datadog エージェントのインストールと `dd-agent` 設定方法を説明。

## :bookmark: 結論
以下の４つのポイントがある

### :notebook: ①Datadog エージェントをインストールするために

 - POINT :one:： 環境変数 `HTTP_PROXY` `HTTPS_PROXY` `NO_PROXY` にプロキシ設定
 - POINT :two:： 環境変数 `DD_HTTP_PROXY` `DD_HTTPS_PROXY` `DD_PROXY_NO_PROXY` にプロキシ設定
 - POINT :three:： `/etc/yum.conf` にプロキシ設定する

### :notebook: ②Datadog 画面上にがメトリクスが表示されるようになるまで

 - POINT :four:： `/etc/datadog-agent/datadog.yaml` にもプロキシを明示し、`datadog agent` 再起動


```
proxy:
    https: http://[プロキシサーバのプライベートIP]:[プロキシサーバのポート]
    http: http://[プロキシサーバのプライベートIP]:[プロキシサーバのポート]
```

## :dog: Datadog の初期状態
どのページに行ってもなにもありません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/18351/bd2c690e-a92e-454b-6d42-d536ef2851a2.png)


## :seedling: AWS インスタンスの初期状態
以下のような構成。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/18351/133ab5b8-858c-85d7-a9c2-485194e3bb50.png)

private サーバから直でインターネットには行けない。

## :sparkles: プロキシサーバの構築

```
# yum update
$ sudo yum update -y

# install squid
$ sudo yum install squid -y

# conf の編集
$ sudo vi /etc/squid/squid.conf
```

以下の部分を変更する

```
And finally deny all other access to this proxy
http_access allow all　←追加
http_access deny all
```

※注①：これは「何者からのプロキシリクエストも許可する」という緩すぎる設定であり、本来はプロキシさせたいサーバのIPに絞るべきである

※注②：プロキシ用のポートも以下のように変更するべきである。（今回は面倒なのでしない）

```
# Squid normally listens to port 3128
#http_port 3128　←先頭に#を追加
http_port 60088　←追加
```

※注③：自身の VPC の CIDR レンジ範囲が許可されているか確認（私はこれにハマりました）

```
acl localnet src 10.0.0.0/16
```

設定チェック（ワーニングがでなければOKっぽい）

```
$ sudo squid -k parse
```

squidの起動

```
# CentOS 6系
$ sudo service squid start

# CentOS 7系
$ systemctl start squid

```

## :a: プロキシ設定をせず、Datadog Agent をインストールしようとする

Google に `curl` はできる状態

```
[ec2-user@ip-10-X-Y-Z ~]$ curl --dump-header - http://www.google.com -x http://[プロキシサーバのプライベートIP]:3128
HTTP/1.1 200 OK
Date: Wed, 20 Mar 2019 19:04:30 GMT
```


しかしDatadogエージェントインストールは失敗

```
DD_API_KEY=abcdefghijklmnopq bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:02:08 --:--:--     0curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection timed out
```



## :b: プロキシ設定をして、Datadog Agent をインストールする

プロキシ設定

```
$ export HTTP_PROXY=http://[プロキシサーバのプライベートIP]:3128
$ export HTTPS_PROXY=http://[プロキシサーバのプライベートIP]:3128
$ export NO_PROXY=169.254.169.254
```


Datadogエージェントインストール、、はまだ成功しない

```
DD_API_KEY=abcdefghijklmnopq bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11280  100 11280    0     0  71531      0 --:--:-- --:--:-- --:--:-- 71847

* Installing YUM sources for Datadog

* Installing the Datadog Agent package

Loaded plugins: priorities, update-motd, upgrade-helper
Cleaning repos: amzn-main amzn-updates datadog
0 metadata files removed
0 sqlite files removed
0 metadata files removed
Loaded plugins: priorities, update-motd, upgrade-helper
https://yum.datadoghq.com/stable/6/x86_64/repodata/repomd.xml: [Errno 12] Timeout on https://yum.datadoghq.com/stable/6/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 5001 milliseconds')
Trying other mirror.
```

ドキュメントを見ると「DD_PROXY～」も設定しなくてはいけないようだ。

[Agent proxy configuration](https://docs.datadoghq.com/agent/proxy/?tab=agentv6)

ということでプロキシ設定再トライ

```
$ export DD_PROXY_HTTP=http://[プロキシサーバのプライベートIP]:3128
$ export DD_PROXY_HTTPS=http://[プロキシサーバのプライベートIP]:3128
$ export DD_PROXY_NO_PROXY=169.254.169.254
```

インストール再トライ

```
(同様のエラー)
```

yum ができていないようなので、`/etc/yum.conf` にプロキシ設定する

```
(略)
proxy=http://[プロキシサーバのプライベートIP]:3128
(略)
```


3度目の正直

```
DD_API_KEY=abcdefghijklmnopq bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"

(略)

Installed:
  datadog-agent.x86_64 1:6.10.2-1

Complete!

* Adding your API key to the Agent configuration: /etc/datadog-agent/datadog.yaml

* Starting the Agent...

datadog-agent start/running, process 29223


Your Agent is running and functioning properly. It will continue to run in the
background and submit metrics to Datadog.

If you ever want to stop the Agent, run:

    sudo stop datadog-agent

And to run it again run:

    sudo start datadog-agent
```

インストール成功！


## :cactus: Datadog 画面上にがメトリクスが表示されるようにする

しかし、いつまで経ってもDatadog画面上で見えない。

`/etc/datadog-agent/datadog.yaml` にもプロキシを明示することにした。

```
proxy:
    https: http://[プロキシサーバのプライベートIP]:3128
    http: http://[プロキシサーバのプライベートIP]:3128
    no_proxy:
      - 169.254.169.254
process_config:
    enabled: "true"
```

datadog agent 再起動
`sudo restart datadog-agent` 


やっとDatadog 画面上にも表れた💡
![image.png](https://qiita-image-store.s3.amazonaws.com/0/18351/825d396f-f791-87fe-600b-a9429de48593.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/18351/bed96415-6f1b-abd8-4dd1-47d2d9abe923.png)


## :notebook_with_decorative_cover: 参考ドキュメント
[Agent proxy configuration](https://docs.datadoghq.com/agent/proxy/)

[検証用にAWSでプロキシ用のサーバを作ってみた話 - Qiita](https://qiita.com/ryo_naka/items/c05713b8f5340edd4a12)

[AWS EC2にプロキシサーバーを設定しよう - Traffic Jam](http://milk0824.hatenadiary.jp/entry/2014/12/13/230847)

[proxyサーバーを立ててみました。 | AWSコスト削減・IaaSインフラ構築のシンプライン株式会社](https://www.simpline.co.jp/tech_ty/proxy%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E7%AB%8B%E3%81%A6%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82/)

[curlコマンドにてproxy設定 - Qiita](https://qiita.com/tkj/items/c6dad4efc0dff4fecd93)

[GCP – DataDogのログ転送用Proxyにハマったんです。 – Mark System Techno](https://www.mark-system.com/?p=1009)